文章目录
DDL——create 、drop 、alter
DML——insert 、delect 、update
![在这里插入图片描述](https://img-blog.csdnimg.cn/eb38511cadd248a9b8c34df62fe6cf63.png)
创建表
create table 表名(
字段1 数据类型, //当往表中插入数据的时候,没有插入该字段,该字段默认为null
字段2 数据类型 default XX, //当往表中插入数据的时候,没有插入该字段,该字段默认为XX
字段3 数据类型,
......
);
- 数据类型
- int 整数
- bigint 长整型
- float 浮点型
- char 定长字符串
- varchar 可变长字符串
- date 日期类型
- BLOB 二进制大对象 -存储图片、视频等流媒体信息
- CLOB 字符大对象 - 存储较大文本 存储4G字符串
- char 和varchar的选择
- 在实际开发中,当某个字段的数据长度不发生改变时,是定长的。性别、生日采用char
- 当一个字段的数据长度不确定时,采用varchar:简介、姓名等
约束
- constraint
- 在创建表的时候,添加约束,可以保证数据的合法性、有效性、完整性
- 约束种类
- 非空约束 not null 约束字段不能为null
- 唯一约束 unique 约束字段不能重复 ,但可以为null
- 主键约束 primary key 约束字段不能为null ,不能重复
- 外键约束 foreign key
- 检查约束 check 【oracle支持该约束,mysql没有该约束】
唯一性约束unique
- 唯一性约束修饰的字段具有唯一性,不能重复,但可以为null
-对一个字段添加唯一性约束:列级约束- 用户名添加唯一性约束
- 用户名添加唯一性约束
- 针对两个字段添加唯一性约束 :表级约束
主键约束
- 主键约束、主键字段、主键值
- 一张表的主键约束只能有1个。
- 主键分类
- 按照主键的字段数量
- 单一主键
- 复合主键——多个字段联合为一个主键约束,违背三范式
- 根据主键性质
- 自然主键——主键是和业务没有关系的自然数。
- 业务主键——主键值与业务挂钩,银行卡做主键,身份证号做主键。最好不要使用与业务挂钩的字段做主键,当业务变动是,需求更改,主键可能也需要更改。
- 按照主键的字段数量
drop table if exists t_user ;
create table t_user(
no int primary key,
name varchar(255),
email varchar(255)
//primary key(name);
);
insert into t_user (no,name,email)values(1,'zhangsan','zhangsan@163.com');
insert into t_user (no,name,email)values(2,'lisi','lisi@163.com');
insert into t_user (no,name,email)values(3,'wangwu','wangwu@163.com');
insert into t_user (no,name,email)values(3,'wangwu','wangwu@163.com');
//ERROR 1062 (23000): Duplicate entry '3' for key 'PRIMARY'
主键自增auto_increment
- id字段自动维护一个递增的数字,由1开始以1递增 **auto_increment**
drop table if exists t_user ;
create table t_user(
id int primary key auto_increment,
name varchar(255)
);
insert into t_user (name) values ('a');
insert into t_user (name) values ('b');
insert into t_user (name) values ('c');
外键约束
- foreign key (该表字段名) references 表名(字段名);
- 外键值可以为null
- 外键字段引用其他表的字段时,被引用的字段必须是主键?
- 不是,引用其他表的字段具有唯一性约束就可以。
- 不是,引用其他表的字段具有唯一性约束就可以。
删除表drop
- drop table if exists t_student;
- 如果t_student存在,就删除。
插入表 insert into…values…
- insert into 表名(字段1,字段2,字段3…)values(值1,值2,值3)
- 要求:字段的数量和值的数量相同,并且数据类型对应相同。
- insert into 表名(字段1)values (值1)——仅插入字段1对应的值,其他值由建表时的语句确定,含有default的字段,采取默认值;没有default的字段默认为null。
- 当一条insert语句执行成功之后,表格当中必然会多出一行记录,如果该行数据有NULL,那么后期也没有办法执行insert语句插入到该行。只能使用update进行更新
- 将查询结果插入到一张表中
mysql> insert into t_student(no,name,sex,classno,brith) values (1,'zhangsan','1','gaosan1ban','1950-10-12');
Query OK, 1 row affected (0.02 sec)
mysql> select * from t_student;
+------+----------+------+------------+------------+
| no | name | sex | classno | brith |
+------+----------+------+------------+------------+
| 1 | zhangsan | 1 | gaosan1ban | 1950-10-12 |
+------+----------+------+------------+------------+
1 row in set (0.02 sec)
表的复制
- create table 表名 as select 查询语句
修改数据update… set
- update
- 语法格式
- update 表名 set 字段1=值1,字段2=值2 …where 条件;
- 注:没有条件,整张表数据全部更新
删除数据delect from
- delect from 表名 where 条件;
- 没有条件全部删除
- 没有条件全部删除
删除大表数据truncate
- truncate table 表名; //表被截断,不可回滚。