Luobxx'Blog

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 表名;

可以用andor连接多条条件,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. 左外连接:在内连接的基础上,还包含表1中所有不符合条件的数据行,并在其中的表2列填写 NULL;
  2. 右外连接:在内连接的基础上,还包含表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将立即执行该语句。

posted @ 2026-01-15 22:18  鱼香_rose  阅读(3)  评论(0)    收藏  举报