1.创建数据库:create database [if not exists] db-name [charset=…] [collate…]:不指定的话默认charset是utf8 默认效验规则是utf8_general_ci(不区分大小写) utf8_bin区分大小写
2.查看数据库:show database; 查看表:show create table tablename;
3.修改数据库:(主要是修改字符集(不能随便改 -造成乱码)和效验规则)
ALTER DATABASE DB-NAME CHARSET=…;
4.数据库删除:DROP DATABASE [IF EXISTS] DB-NAME;
执行后的结果:①数据库内部看不到对应的数据库 ②对应的数据库文件夹被删,级联删除,里面的数据表全被删除
查看数据库的连接情况:SHOW PROCESSLIST;
创建表:
create table db_name(id int,name varchar(长度) comment’…’,password char(32) comment’…’) charset=utf8 engine …;
5.查看表结构:desc 表名;
查看表内容:select * from 表名;
修改表
在项目实际开发中,经常修改某个表的结构,比如字段名字,字段大小,字段类型,表的字符集类型,表的存储引擎等等。我们还有需求,添加字段,删除字段等等。这时我们就需要修改表。
①ALTER TABLE tablename ADD 名称 类型 ;添加
e.g. alter table users add asset varchar(100) comment’图片路径’ after birthday;–另一个路径的名称
②ALTER TABLE tablename MODIfy (column datatype [DEFAULT expr][,column datatype]…); 修改
e.g. alter table uers modify name varchar(60);
③添加
insert into users values (…)
④删除 ALTER TABLE tablename DROP (column);
⑤修改表名为:employee;
alter table name1 rename (to) name2;
⑥修改列名:alter table employee change n1 n2 type(…);
e.g.alter table employee change name xingming varchar(60);
删除表操作:DROP TABLE[IF IS EXISTS] tb-name;
bit[(M)] : 位字段类型。M表示每个值的位数,范围从1到64。如果M被忽略,默认为1,这时只能存放0或1.,在显示时,是按照ASCII对应显示的。
float,decimal默认都是有符号的。decimal比float的精度更高。float:最大为7位精度,decimal支持
30位。若m和d被省略,被默认是10,0。
varchar长度可以指定为0到65535之间的值,但是有1 - 3 个字节用于记录数据大小,所以说有效字节数是65532。
当我们的表的编码是utf8时,varchar(n)的参数n最大值是65532/3=21844[因为utf中,一个字符占用3个字节],如果编码是gbk,varchar(n)的参数n最大是65532/2=32766(因为gbk中,一个字符占用2字节)。
时间戳:常用的日期有如下三个:
datetime 时间日期格式 ‘yyyy-mm-dd HH:ii:ss’ 表示范围从1000到9999,占用八字节
date:日期 ‘yyyy-mm-dd’,占用三字节
timestamp:时间戳,从1970年开始的 yyyy-mm-dd HH:ii:ss格式和datetime完全一致,占用四字节
4.5 enum和set
语法:
enum:枚举,“单选”类型;
enum(‘选项1’,‘选项2’,‘选项3’,…);
该设定只是提供了若干个选项的值,最终一个单元格中,实际只存储了其中一个值;而且出于效率考虑,这些值实际存储的是“数字”,因为这些选项的每个选项值依次对应如下数字:1,2,3,…最多65535个;当我们添加枚举值时,也可以添加对应的数字编号。
set:集合,“多选”类型;
set(‘选项值1’,‘选项值2’,‘选项值3’, …);
该设定只是提供了若干个选项的值,最终一个单元格中,设计可存储了其中任意多值;而且出于效率考虑,这些值实际存储的是“数字”,因为这些选项的每个选项值依次对应如下数字:1,2,4,8,16,32,… 最多64个。
说明:不建议在添加枚举值,集合值的时候采用数字的方式,因为不利于阅读。
查询:1 select * from votes where hobby=‘登山’;–不能查询出所有符合的人
集合查询使用find_ in_ set函数:find_in_set(sub,str_list) :如果 sub 在 str_list 中,则返回第一个下标;如果不在,返回0; str_list 是用逗号分隔的字符串。
表的约束:1.null(默认)和not null,若指定不是空,在没有给相应字段赋值时会报错。
2.default默认值
3.comment:列描述,用来描述字段。
4.zerofill:用来补全0;
主键::primary key用来唯一的约束该字段里面的数据,不能重复,不能为空,一张表中最多只能有一个主键;主键所在的列通常是整数类型。
再创建表的时候直接加主键:
1.mysql> create table tt13 (
-> id int unsigned primary key comment ‘学号不能为空’,
-> name varchar(20) not null);
Query OK, 0 rows affected (0.00 sec)
2.复合主键:
mysql> create table tt14(
-> id int unsigned,
-> course char(10) comment ‘课程代码’,
-> score tinyint unsigned default 60 comment ‘成绩’,
-> primary key(id, course) );-- id和course为复合主键
3.追加主键:alter table 表名 add primary key(字段名);
4.删除主键:alter table 表名 drop primary key;
自增长:
auto_increment:当对应的字段,不给值,会自动的被系统触发,系统会从当前字段中已经有的最大值+1操作,得到一个新的不同的值。通常和主键搭配使用,作为逻辑主键。
自增长的特点:
任何一个字段要做自增长,前提是本身是一个索引(key一栏有值)
自增长字段必须是整数
一张表最多只能有一个自增长
在插入后获取上次插入的 AUTO_INCREMENT 的值(批量插入获取的是第一个值)
唯一键 unique
一张表中有往往有很多字段需要唯一性,数据不能重复,但是一张表中只能有一个主键:唯一键就可以解决表中有多个字段需要唯一性约束的问题。
唯一键的本质和主键差不多,唯一键允许为空,而且可以多个为空,空字段不做唯一性比较。
外键
外键用于定义主表和从表之间的关系:外键约束主要定义在从表上,主表则必须是有主键约束或unique约束。当定义外键后,要求外键列数据必须在主表的主键列存在或为null。
foreign key (字段名) references 主表(列)