DML
添加和完整约束
增加: insert into 表名 (字段列明集合) values(值得集合) ;
* 要保证数据的正确性和完整性
完整性约束:
* 主键一条数据在数据库中的唯一标识, 特点: 非空唯一 primary key
* 主键自增长如果主键的是int,那么如果给主键赋值为null , 会自动根据上一条记录的值+1 ; primary key aoto_increment
* 唯一 unique
* 非空 not null
* 外键
外键约束
外键约束: 一张表的主键作为另一张表的外键,就保证数据的完整性
* 注意事项: 主键必须和外键的数据类型一致,名称可以不一致
表和表之间的关系
* 一对一的关系主外键可以在任意一方
* 一对多或者多对一的关系外键添加到多的一方
* 多对多的关系定义中间表,中间表的两个字段都是外键,分别用于关联两个表的主键
删除和修改
删除: delete from 表名 [where 条件] ;
* delete from 表名 ; -- 删除所有的数据逐行删除
* truncate table 表名 ; -- 删除所有的数据(直接把表删除然后在在创建表)
修改: update 表名 set 字段名 = 字段值 , 字段名 = 字段值 , ... [where 条件] ;
案例:
-- 创建数据库
create databases mydb ;
-- 查询所有数据库名称
show databases ;
-- 删除数据库
drop database stu;
-- 选择使用的数据库
use day02;
-- 创建表
create table student(
-- 字段名数据类型
sid INT ,
sname VARCHAR(20),
gender CHAR(1),
score DOUBLE(4,2),
birthday TIMESTAMP
);
-- 查看表名称
show tables ;
-- 删除表
drop table stu;
-- 查看表结构
desc student;
-- 修改表结构
-- 修改之添加列:给stu表添加classname列:
Alter table student add classname vercar(100);
-- 修改之修改列类型:修改stu表的gender列类型为char(2):
ALTER TABLE student MODIFY gender CHAR(2);
-- 修改之修改列名:修改stu表的gender列名为sex:
ALTER TABLE student CHANGE sex gender CHAR(1);
-- 修改之删除列:删除stu表的classname列:
ALTER TABLE student DROP classname;
-- 修改表名称
ALTER TABLE student RENAME TO tb_student;
DESC tb_student;
-- 插入数据
INSERT INTO tb_student(sid,sname,gender,score,birthday) VALUES(1,'风清扬','男',99.99,'1998-11-11');
INSERT INTO tb_student(sid,sname,gender,score,birthday) VALUES(2,'岳不群','女',88.99,NULL);
INSERT INTO tb_student(sid,sname) VALUES(3,'貂蝉');
INSERT INTO tb_student VALUES(4,'吕布','男',88.99,NULL);
-- 删除数据
DELETE FROM tb_student WHERE sname = '貂蝉';
-- 查询数据
SELECT * FROM tb_student;
-- 清空表中所有记录
TRUNCATE TABLE tb_student;
-- 先删除表
DROP TABLE tb_student;
-- 再创建一张空表
CREATE TABLE tb_student(
-- 字段名数据类型
sid INT ,
sname VARCHAR(20),
gender CHAR(1),
score DOUBLE(4,2),
birthday TIMESTAMP
);
-- 修改数据
UPDATE
tb_student
SET
gender = '无',
score = 12.88
WHERE
sid = 2;
-- 创建emp表
CREATE TABLE emp(
empno INT, -- 员工编号
ename VARCHAR(50), -- 员工姓名
job VARCHAR(50), -- 员工工种
mgr INT, -- 领导编号
hiredate DATE, -- 入职日期
sal DECIMAL(7,2), -- 工资
comm DECIMAL(7,2), -- 奖金
deptno INT -- 部门编号
) ;
-- 添加数据
INSERT INTO emp VALUES(7369,'SMITH','CLERK',7902,'1980-12-17',800,NULL,20);
INSERT INTO emp VALUES(7499,'ALLEN','SALESMAN',7698,'1981-02-20',1600,300,30);
INSERT INTO emp VALUES(7521,'WARD','SALESMAN',7698,'1981-02-22',1250,500,30);
INSERT INTO emp VALUES(7566,'JONES','MANAGER',7839,'1981-04-02',2975,NULL,20);
INSERT INTO emp VALUES(7654,'MARTIN','SALESMAN',7698,'1981-09-28',1250,1400,30);
-- 查询所有列数据
SELECT * FROM emp;
SELECT empno,ename,job FROM emp;
-- 结果集
-- 查询工资是800块的员工信息
SELECT * FROM emp WHERE sal = 800;
-- 查询工资大于等于2500的员工信息
SELECT * FROM emp WHERE sal >= 2500;
-- 查询工资小于等于2500的员工信息
SELECT * FROM emp WHERE sal <= 2500;
-- 查询员工资在1500 到 2500 之间
SELECT * FROM emp WHERE sal >= 1500 AND sal <=2500;
-- 查询员工资在1500 到 2500 之间
SELECT * FROM emp WHERE sal BETWEEN 1500 AND 2500;
-- 查询员工工资是1000 或者2000的人
SELECT * FROM emp WHERE sal = 800 OR sal = 5000;
-- 查询员工工资是1000 或者2000的人
SELECT * FROM emp WHERE sal IN(800,5000);
-- 查询员工工资不是800
SELECT * FROM emp WHERE sal != 800;
SELECT * FROM emp WHERE sal <> 800;
-- 查询有奖金的员工信息
SELECT * FROM emp WHERE comm IS NOT NULL;
-- 查询没有有奖金的员工信息
SELECT * FROM emp WHERE comm IS NULL;
-- 查询姓s的用户
SELECT * FROM emp WHERE ename LIKE 's%';
-- 查询姓名第三个字符是I的用户
SELECT * FROM emp WHERE ename LIKE '__I%';
-- 查询名字有五位的用户
SELECT * FROM emp WHERE ename LIKE '_____';
-- 查询名字包含A的用户
SELECT * FROM emp WHERE ename LIKE '%A%';
-- 起别名
SELECT ename 姓名,sal AS 工资, comm AS 奖金 FROM emp;
SELECT e.ename,e.job FROM emp e;
-- 计算
SELECT ename , sal , comm , (sal+IFNULL(comm,0)) 月薪 FROM emp;
-- 去除重复记录
SELECT DISTINCT sal FROM emp;