1:存储引擎:InnoDB MyIsam memory blackhole
InnoDB 支持事务,行级锁,外键
事务:原子性操作
就是讲一组sql语句当成一个原子性操作
要么全部成功,要么全部不成功,不成功事务回滚.
行级锁:同一张表中的不同行可以被同时修改
MyIsam : 查询快,相对插入数据和修改数据相对慢
表级锁,同一张表不能同时被修改
memory:处理数据速度快,如每个用户的登录状态可以使用 数据都存储在内存中, 数据量小,并对服务器的内存有要求 断电消失
blackhole 黑洞 放进去的数据都不存 创建表时默认的存储引擎是Innodb:
指定创建表的存储引擎: create table staff_info (id int,age int) engine = MyIsam;
2.sql语句: 创建表:create table staff_info (id int,name varchar(20),age int,sex enum('female','male'),phone char(11),job varchar(20));
查看表结构:desc staff_info;
show create table staff_info \G;
插入数据:insert into staff_info (id,name,age,sex,phone,job) values (1,'liming',12,男,1234567912,it);
插入单行数据:insert into staff_info vales (1,'liming',12,男,1234567912,it);
插入多行数据:insert into staff_info values
(1,'liming',12,男,1234567913,it),
(2,'liming',12,男,1234567914,it),
(3,'liming',12,男,1234567915,it),
(4,'liming',12,男,1234567916,it);
查看表中所有数据: select * from staff_info;
查看指定列的数据: select age from staff_info;
3.常用数值:int,float,decimal(无误差,用于汇率,利息等高精度数值)
4,时间 :
date 描述年月日
datetime 描述年月日时分秒
time 时分秒
create table t1 (d date,t time,y year,dt datetime,ts timestamp);
insert into t1 (now(),now(),now(),now(),now());
+------------+----------+------+---------------------+---------------------+
# | d | t | y | dt | t s |
# +------------+----------+------+---------------------+---------------------+
# | NULL | NULL | NULL | NULL | 2018-09-29 11:27:29 |
# | 2018-09-29 | 11:29:07 | 2018 | 2018-09-29 11:29:07 | 2018-09-29 11:29:07 |
# +------------+----------+------+---------------------+---------------------+
5:基本数据类型:
char() 0-255字节,定长字符串
定长,浪费磁盘 ,存取速度非常快
应用:这一列数据的长度变化小,如id,手机号,身份证号,序号
频繁存取,对效率要求高
短数据时使用
varchar()0 -65535 字节,变长字符串
变长,节省磁盘空间 ,存取速度相对char慢
应用:这一列数据的长度变化大, name,地址
对效率要求相对小
相对长数据时使用
create table user (id int,name varchar(30),age char(3));
insert into user values(1,'li',12);
插入数据,name实际上占用了两个字节,age占用了三个字节.
char类型在查询时会默认去掉所有补全的空格
插入带有 空格的数据,查询的时候看到varchar字段是带有空格显示的,char字段显示的时候是会去掉所有的空格
插入的数据如果超过了约束的范围,会截断数据
6,枚举与集合:enum 与 set
枚举,在值集合中选取单个值,(如选什么银行卡,选什么支付方式时,性别) : sex enum('male','female') [ 单选框]
集合 :在值集合里选取任意的值,多选hobby set('a','b','c') 去重,多选框
create table t2 (name varchar(20),sex enum('male','female'),hobby set('a','b','c'));
insert into t2 values ('liming','female','a,b,b,d'); b会去重,d 不会写入表
如果插入的数据不在枚举或集合中,那么数据不会写入表中
7.表约束:
not null 非空 default
如果不输入就使用默认的
unique 唯一 auto_increment (id自增,必须唯一,以及是数字类型)
如果是空格,只能有一个空格
非空+唯一就不能有空格
联合唯一 如(ip,port)
就是给一个以上订单字段设置唯一约束
primary key 主键 (not null + unique) 唯一 + 非空 加速查询,每张表只能有一个主键
当我们以非空并且唯一的约束来创建一个表时,如果没有指定主键,那么第一个非空唯一的字段将会被设置成主键
foreign key 外键 (unique,外表中唯一的)
create table t1 (id int primary key,name varchar(20) not null,phone char(11) not null unique ),
insert into t1 (id,name) values (1,'liming')
外键:
create table department (id int primary key auto_increment,dep_name varchar(20) not null);
create table staff (sid int primary key auto_increment,sname varchar(20) not nll,dep_id int,
foreign key(dep_id) references department(id));
show create table staff;查看外键,外键 MUL
连级删除:
如果一个表中的字段作为外键对另一个表提供服务,那么默认不能直接删除外表中正在使用的数据
on delete cascade
on update cascade
course : cid,cname,cprice
student :sid,sname,age,course_id
create table course (cid int primary key auto_increment,cname varchar(20) not null,cprice int not null);
create table student (sid int primary key auto_increment,sname varchar(20) not null,age char(3) not null,course_id int ,foreign key(course_id) references course(cid),on delete cascade on update cascade);
insert into course (cname,cprice) values ('python',19800),('linux',15800);
insert into student (sname,age,course_id) values ('liming',12,1),('lining',18,2);
delete from course where cid = 1
联合唯一:
create table t1 (id int primary key,ip char(15) not null,port int not null,unique(ip,port));
设置默认值:default
create table user (id int primary key auto_increment,name varchar(20) not null,sex enum('male','female') not null default 'male');
8,表结构修改:
alter table user rename user1; 修改表名
alter table user add name varchar(20) not null after id; 在id后面添加列
alter table user add name varchar(20) not null first;
alter table user drop name;删除列
alter table user modify name char(50) not null after age; 修改已存在的列名的约束,位置
alter table user change name new_name varchar(20) not null after id;修改表名