几个基础概念:
SQL:Structure Query Language(结构化查询语言),是关系式数据库管理系统的标准语言
主要分为四部分:
DDL(Data Definition Language):数据定义语言,用来定义数据库对象;CREATE和DROP
DML(Data Manipulation Language):数据操作语言,用来定义数据库记录(数据);INSERT,UPDATE和DELETE
DCL(Data Control Language):数据控制语言,用来定义访问权限和安全级别;GRANT和REVOKE
DQL(Data Query Language):数据查询语言,用来查询记录(数据);SELECT,WHERE,ORDER BY,GROUP BY和HAVING
注释写法:
# 单行注释
-- 注意双短杠后有一个空格 --空格 -- 这也是一种单行注释
/* 这种可用于多行注释 */
1.操作数据库
创建数据库
create databse dbname;
创建数据库并设置编码格式为gbk。不指定的话默认为utf-8
create database dbname character set gbk;
设置校验规则
create database dbname character set gbk collate gbk_chinese_ci;
查看当前数据库服务器中的所有数据库
show databases;
查看创建的dbname数据库的定义信息,即字符集之类
show create database dbname;
把dbname的字符集修改为utf8
alter database dbname character set utf8;
查看当前使用的数据库
select database();
切换到dbname数据库
use dbname;
删除前面创建的dbname数据库
drop database dbname;
2.数据类型
tinyint: 短整型,1个字节
int :整型,4个字节
double:浮点型,例如double(5,2)表示最多5位,其中2位为小数,即最大值为999.99。
varchar:可变长度字符串类型。varchar(10) ‘aaa’ 占3位
char:固定长度字符串类型。char(10) ‘aaa ’ 占10位
text:大文本字符串类型
blob:字节类型
datetime:日期时间类型。yyyy-MM-dd hh:mm:ss
date:日期类型,格式为:yyyy-MM-dd
time:时间类型,格式为:hh:mm:ss
timestamp:时间戳类型 yyyy-MM-dd hh:mm:ss 会自动赋值
字符串类型和日期类型都要用单引号括起来。
若定义一个字段为timestamp,这个字段里的时间数据会随其他字段修改的时候自动刷新,
所以这个数据类型的字段可以存放这条记录最后被修改的时间。
3.数据表
创建表
create table 表名(
字段名 类型(长度) [约束],
字段名 类型(长度) [约束],
......
);
查看表:
查看数据库中的所有表:
show tables;
查看表结构:
desc tbname;
查看表的创建细节:
show create table tbname;
删除表:
drop table tbname;
修改表:
alter table 表名 add 列名 类型(长度) [约束]; --添加列
alter table 表名 modify 列名 类型(长度) [约束]; --修改列的类型长度及约束
alter table 表名 change 旧列名 新列名 类型(长度) [约束]; --修改表列名
alter table 表名 drop 列名; --删除列
alter table 表名 character set 字符集; --修改表的字符集
rename table 表名 to 新表名; --修改表名
alter table 表名 add primary key(字段1……);-- 追加主键约束
alter table 表名 drop primary key; -- 删除主键,只是删除约束,不删除数据
一个例子:
create table tbname(
id int(5) zerofill auto_increment,
name varchar(20),
age int not null,
brith date not null,
phone int(11) unique,
sex varchar(1) default '男',
primary key(id,name) comment 'id和name作为复合主键'
);
常见的几种约束:
1.空属性 not null:not null 此列属性不允许为空,必须做数据插入
2.默认值:某一种数据会经常性的出现某个具体的值,可以在一开始就指定好,在需要真实数据的时候,用户可以选择性的使用默认值
a:如果某一种属性经常出现,可以在一开始就指定数据
b:默认值配合not null使用
c:set和enum不允许设置默认值
3.列描述 comment:comment描述仅作为列的作用,没有实际含义,不等同于注释
这个可以通过 show create table tbname; 命令查看
4.自动填充0 zerofill
a:如果某一数值列规定了zerofill,则自动把此列变为无符号整形
b: 规定了zerofill的数据列,如果数据列的长度没达到规定长度,则在数据前面自动填充0
eg:insert into t6 value (10,123); —–>00123。(如果超过或者达到长度,则不填充)
5.主键约束 primary key:主键用于唯一约束字段数据,使用主键约束的字段,不能为空,不能重复,主键所在的列不能为浮点型,一张表有且只能有一个主键
a.单主键
eg:
create table tbname2(
id int primary key comment 'id列表示学生学号不允许为空,也不允许重复',
name varchar(20) not null
);
b.复合主键
create table tbname2(
id int(5) zerofill,
name varchar(20),
age int not null,
primary key(id,name) comment 'id和name作为复合主键,组合起来不能重复'
);
6.自增长(auto_increment)
a.任何一个字段要做自增长,其本身必须是索引(key必须有值)
b.一张表有且只能有一个自增长
c.主键和自增长搭配使用,会以最大值自增长
primary key + auto_increment:逻辑主键
7.唯一键(unique)
唯一键允许为空,但是不能重复,一张表中可以有多个字段设置唯一
唯一键解决表中多个字段需要唯一性约束的问题
null不做比较,可以允许多个null
8.外键约束(foreign key)
使用外键的条件;
表的存储引擎必须是 innodb
字段类型要一致
被参照字段必须要是索引类型的一种,如 primary key
创建外键:
a, 建表的时候指定外键
create table 表 (
foreign key (表A的字段名) references 表B(字段名);
) engine=innodb;
b, 在已有表创建外键
alter table 表1 ( add foreign key(字段名) references 表2(字段名) ;);
删除外键字段
show create table 表名; //查看外键名称
alter table 表名 drop foreign key 约束名;
注意事项:
外键值可以为null
外键必须是索引类型的一种
创建先创建父表,再创建子表
删除先删除子表数据
插入先插入父表数据
4.数据操作
插入数据(insert):
insert into 表(列名1,列名2,列名3..) values(值1,值2,值3..);--向表中插入某些列
insert into 表 values(值1,值2,值3..); --向表中插入所有列
更新数据(upload):
update 表名 set 字段名=值,字段名=值...; --这个会修改所有的数据,把一列的值都变了
update 表名 set 字段名=值,字段名=值... where 条件;
删除数据(delete):
delete from 表名 ; -- 删除表中所有记录
delete from 表名 where 条件; -- 删除查找到的数据条
truncate table 表名; -- 删除表里所有数据
delete删除表中的数据,是一条一条删除,不清空auto_increment记录数;
删除后的数据如果在一个事务中还可以找回。
truncate删除是把表直接drop掉,重新建表,auto_increment将置为零。
删除的数据不能找回。执行速度比delete快。