Mysql数据定义与操作实战
\(\Huge{MySQL数据定义与操作实战}\)
初识数据库
基础命令
查看已存在的数据库:show databases;
选择数据库:use MyDb;
查看表的基本结构:describe 表名;ordesc 表名;
删除表:drop table 表名;
数据库安全
连接数据库
mysql -uroot -p123123 -h127.0.0.1 //头歌连接数据库操作
mysql -h 主机地址 -P 端口号 -u用户名 -p用户密码 //连接数据库
mysql -u root -p //连接本地数据库
创建数据库
creare database TestDb;
创建表
create table 表名 (
字段名, 数据类型,
字段名, 数据类型,
......
)
主键约束
主键,是表中一列或者多列的组合,主键约束(Primary Key Constraint)要求主键列的数据唯一,并且不允许为空,主键能够唯一的标识表中的每一条记录,可以结合外键来定义与不同数据表之间的关系。
CREATE TABLE t_emp2
(
name VARCHAR(32) primary key, //方式1:单个主键
deptId INT,
salary FLOAT,
PRIMARY KEY(name,deptId) //方式二:2联合主键(单个主键也可)
)
外键约束
外键类型必须和对应主键类型一致
constraint 外键名 foreign key(字段名) references 主表名(主键名)
CREATE TABLE t_dept
(
deptId INT PRIMARY KEY,
name VARCHAR(22),
location VARCHAR(50)
);
CREATE TABLE t_emp
(
id INT PRIMARY KEY,
name VARCHAR(22),
deptId INT,
CONSTRAINT fk_emp_dept1 FOREIGN KEY(deptId) REFERENCES t_dept(deptId)
);
外键名:外键名称
字段名:当前表中该外键名称
主表名:主表
主键名:主表中主键的名称
添加常用约束
若要给字段添加两个或者两个以上的约束,约束之间以空格隔开即可。
唯一约束: UNIQUE
非空约束: NOT NULL
默认约束: DEFAULT
chech约束:
注意:
- 如果是添加字符串型默认值要使用单引号,如果是整型则不需要加任何符号;
- 如果要添加的是中文默认值,则需要加上
DEFAULT CHARSET=utf8;使用英文字符则不需要。
create table t_dept (
id INT primary key,
name varcahr(22) UNIQUE,
location varchar(22) NOT NULL,
sex varchar(2) DEFAULT '男'
) DEFAULT charset = utf8;
设置表的属性值自动增加: AUTO_INCREMENT
默认情况下初始值和增量都为1。
| id | name |
|---|---|
| 1 | 张三 |
| 2 | 李四 |
| ID每次自动加一 | 姓名 |
| ... | XXX |
| 10 | XXX |
create table t_dept (
id int primary key auto_increment,
name varchar(32)
);
数据库和表的基本操作
查看表结构
查看表的基本结构:describe 表名;ordesc 表名;
结构种各个字段的含义:
NULL:表示该列是否能存储NULL值;Key:表示该列是否已编制索引;PRI:表示该列是此表主键的一部分;UNI:表示该列是UNIQUE索引的一部分;MUL:表示在列中某个给定值允许出现多次;Default:表示该列是否有默认值,如果有的话值是多少;Extra:表示可以获取的与给定列有关的附加信息。
show create table 表名\G; 加上\G之后会改善排版效果。
修改表名:alter table 旧表名 rename 新表名;
修改字段名与数据类型
修改字段名:alter table 表名 change 旧字段名 新字段名 新数据类型;。
如果不需要修改字段的数据类型,可以把新字段的数据类型设置为和原来一样,但是不要置空。
修改字段数据类型:alter table 表名 modify 字段名 数据类型;
添加与删除字段
添加字段:alter table 表名 add 新字段名 数据类型[约束条件] [first|after] 已存在字段名;。
[FIRST|AFTER]:不写则默认把新字段添加到表最后一列
first:添加到第一列
after 已存在字段名:添加到该列之后
删除字段:after table 表名 drop 字段名;
移动至第一行:alter table 表名 modify 字段名 字段类型 first;
移动至XXX后面:alter table 表名 modify 字段名 字段类型 after XXX;
删除表的外键约束:alter table 表名 drop foreign key 外键约束名;
插入全部数据:insert into 表名 values (...), (...)...;
插入部分数据:insert into 表名(字段名) values(...), (...), ...;
更新数据:update 表名 set 字段名1 = 内容1, 字段名2 = 内容2, 字段名3 = 内容3 WHERE 过滤条件;
删除表中所有数据:delete from 表名;
删除表中部分数据:delete form 表名 where 过滤条件;
查询
单表查询
查询部分内容:select 字段名1,字段名2... from 表名;
查询所有内容:select * from 表名;
查询符合条件内容1:select 字段名1,字段名2... from 表名 where 字段名 in (或用not in)(条件);
查询符合条件内容2:select 字段名1,字段名2... from 表名 where 字段名 between ... and ...;
查询符合条件内容3:select 字段名1,字段名2... from 表名 where 字段名 like '%B%';
查询空值:select * from 表名 where 字段名 is null;
查询非重复(去除重复结果):select distinct 字段名 from 表名;
可以用and和or连接多条条件,AND 的优先级要高于 OR。
对查询结果排序:order by 字段名 [ASC,DESC|]。
分组查询:group by 字段名。
分组查询不能用where来筛选,需要使用having。
去除重复并返回每组的第一个记录,常和聚合函数使用。
使用limit限制查询结果数量:SELECT 字段名 FROM 表名 LIMIT [OFFSET,] 记录数;。
连接查询
内连接查询
语法:表1 [inner] join 表2 on 表1.字段=表2.字段
从表1中取出每一条记录,去表2中与所有的记录进行匹配,匹配必须是某个条件在表1中与表2中相同,最终才会保留结果,否则不保留。inner 关键字可省略不写;on 表示连接条件:条件字段就是代表相同的业务含义,大多数情况下为两张表中的主外键关系。
外连接查询
语法:表1 left/right [outer] join 表2 on 表1.字段=表2.字段
- 左外连接:在内连接的基础上,还包含表1中所有不符合条件的数据行,并在其中的表2列填写 NULL;
- 右外连接:在内连接的基础上,还包含表2中所有不符合条件的数据行,并在其中的表1列填写 NULL。
连接查询去除重复列
SELECT *
FROM student INNER JOIN sc USING(Sno) # 内连接
SELECT *
FROM student NATURAL JOIN sc # 自然连接
复合条件链接查询
子查询
select 字段名 from 表名 where 字段名 > [ALL/ANY] (select 字段名 from 表名 where 条件)
...[exists|not exists] table # 表示前面表格中的信息在table中存在或不存在,作为判断语句
复杂查询
函数查询
分组选择数据
其他函数的使用
分组选择数据
数据库编程
delimiter
参考blog:MySql中 delimiter 详解_mysql delimiter$$ 用法-CSDN博客
delimiter的意思是定界符,在mysql中,delimiter相当于重定义,主要用于重定义结束符。
其实就是告诉mysql解释器,该段命令是否已经结束了,mysql是否可以执行了。默认情况下,delimiter是分号;。在命令行客户端中,如果有一行命令以分号结束,那么回车后,mysql将会执行该命令。
DELIMITER $$
DROP TRIGGER IF EXISTS `updateegopriceondelete`$$
CREATE
TRIGGER `updateegopriceondelete` AFTER DELETE ON `customerinfo`
FOR EACH ROW BEGIN
DELETE FROM egoprice WHERE customerId=OLD.customerId;
END$$
DELIMITER ;
其中DELIMITER 定好结束符为"$$", 然后最后又定义为";", MYSQL的默认结束符为";".
详细解释:
其实就是告诉mysql解释器,该段命令是否已经结束了,mysql是否可以执行了。
默认情况下,delimiter是分号;。在命令行客户端中,如果有一行命令以分号结束,
那么回车后,mysql将会执行该命令。如输入下面的语句
mysql> select * from test_table;
然后回车,那么MySQL将立即执行该语句。

浙公网安备 33010602011771号