MySQL的简单总结
2021/9/16 19:35:18
本文主要是介绍MySQL的简单总结,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
本内容没有涉及到数据库的查询操作,如有需求,请移步MySQL的简单查询操作
01、开启数据库服务
1. MySQL服务的启动与停止
方式一:计算机管理 ——> 服务和应用程序 ——> 服务 ——> 找到对应的服务进行操作 方式二: 1、 以管理员的身份打开DOS命令行 2、 启动服务:net start 名(mysql7810) 3、 停止服务:net stop 名(mysql7810)
2. MySQL服务的登录和退出
登录之前,服务必须是启动状态 方式一:打开MySQl的自己的DOS命令行,输入密码即可 方式二:以管理员的身份打开普通的DOS命令行,输入:"mysql -h主机名 -P端口号 -u用户名 -p密码" 1、 输入:mysql -h localhost -P 3306(端口号) -uroot(用户名) -pxxxx(密码) 2、 如果是在本机启动的服务,可以直接:mysql -uroot(用户名) -pxxxx(密码)
键 | 值 |
---|---|
-h | localhost |
-P | 3306,端口号 |
-u | root,用户名 |
-p | 用户的密码 |
02、 SQL语言的介绍
SQL语言: 结构化查询语言(Structure Query Language),专门用于与数据库通讯的语言 特点: 1、 不是特有的语言,几乎所有DBMS都支持SQL语言 2、 简单易学 3、 简单,但是功能强大 规则: 1、 不区分大小写 2、 用 ";" 结尾,表示一条命令的结束 3、 注释:单行 “#” 或者 “--空格”;多行”/* */“ 4、 命令可以换行书写
03、库的管理
1. 查看权限内可使用的所有数据库 SHOW DATABASES; 2. 使用指定的数据库 USE test; 3. 查看当前正在使用哪一个数据库 SELECT DATABASE(); 4. 创建一个新的数据库(字符集为utf8) CREATE DATABASE test CHARACTER SET utf8; CREATE DATABASE IF NOT EXISTS test CHARACTER SET utf8; 5. 更改指定数据库的字符集 ALTER DATABASE test CHARACTER SET utf8; 6. 更改数据库的名称 因为SQL语言没有提供直接的命令 我们可以将数据库备份成sql文件,之后在文件中更改参数即可 7. 删除指定的数据库 DROP DATABASE test; DROP DATABASE IF EXISTS test;
04、常见数据类型的简单总结
1. 整型
(1) 五种整数类型
类型 | 说明 | 字节数 | 范围 |
---|---|---|---|
tinyint | 很小的整数 | 1 | 有符号:-2^7 ~ 2^7-1 无符合:0 ~ 2^8-1 |
smallint | 小整数 | 2 | 有符号:-2^15 ~ 2^15-1 无符合:0 ~ 2^16-1 |
mediumint | 中等整数 | 3 | 有符号:-2^23 ~ 2^23-1 无符合:0 ~ 2^24-1 |
int | 普通整数 | 4 | 有符号:-2^31 ~ 2^31-1 无符合:0 ~ 2^32-1 |
bigint | 大整数 | 8 | 有符号:-2^63 ~ 2^63-1 无符合:0 ~ 2^64-1 |
(2) 无符号与有符号的比较
- 无符号
- 非负数
- 相同数据类型,无符号的最大值是有符号的两倍
- 需要手动设置无符号类型的数:num int unsigned
- 有符号
- 有正有负
- 默认是有符号的数
(3) 数值显示的长度
- 代表了数值显示的最大宽度
- 如果不设置长度 会有 默认的长度
- 如果超出指定的长度,会正常显示全部的数
- zerofill关键字
- 若是插入的数据不够指定的长度,会正常显示全部的数,而zerofill关键字会使用’0’进行填充,使其达到符合要求的长度
- 如果插入的数值长度,则在前面补’0’
- 例如:长度 = 8, int a = 123, 则插入表的数值是 ‘00000123’,会在前面补上对应的0
(4) 数值的范围
- 由类型决定
- 如果插入的数值超出了范围,会报警告(out of range),并默认临界值
(5) 代码演示
DROP TABLE IF EXISTS test; CREATE TABLE IF NOT EXISTS test ( t1 INT(10) ZEROFILL, # 如果不足10位,就在前面补'0',超过10位就正常显示 t2 INT(10), # 默认是有符号位 t3 INT(10) UNSIGNED, # 设置无符号位,即非负数 t4 INT(10) ZEROFILL UNSIGNED, # 二者搭配使用 t5 INT(10) ); DROP TABLE IF EXISTS test;
2. 小数
(1) 三种小数
类型 | 特点 |
---|---|
float(M,D) | 单精度浮点型 |
double(M,D) | 双精度浮点型 |
decimal(M,D) | 定点型,可简写成dec(M,D) |
(2) 两个参数
- D:代表小数点后面的位数
- M:整数部位和小数部位的位数之和
- 两个参数可以省略
- 如果不省略
- 两部分都没有超出长度,正常显示
- 如果某一部分超出,则显示’临界值’
(3) 定点数和浮点数
- 浮点数
- 浮动型默认的是没有M和D
- 定点数
- 定点型默认有(10, 0)
- 定点数的精确度较高,如果要求插入的数值的精确度要求较高,则考虑使用
(4) 代码演示
DROP TABLE IF EXISTS test; CREATE TABLE test ( f1 FLOAT (5, 2), # 浮点 f2 DOUBLE (7, 3), # 浮点 f3 DECIMAL(7, 3) # 定点 ); INSERT INTO test VALUES (3.4, 3.4, 3.4), (1234.5, 1234.5, 1234.5), (12345.6, 12345.6, 12345.6); SELECT * FROM test;
3. 日期型
(1) 三种日期类型
类型 | 格式 | 范围 | 对应的Java类 |
---|---|---|---|
date | YYYY-MM-DD | 从 ‘1000-01-01’ 到 ‘9999-12-31’ | LocalDate |
time | HH:MM:SS | 从 ‘-838:59:59’ 到 ‘838:59:59’ | LocalTime |
datetime | YYYY-MM-DD HH:MM:SS | 从’1000-01-01 00:00:00’ 到 ‘9999-12-31 23:59:59’ | LocalDateTime |
(2) 代码演示
DROP TABLE IF EXISTS test; CREATE TABLE test ( t1 DATE, # 日期 t2 TIME, # 时间 t3 DATETIME, # 日期+时间 ); INSERT INTO test VALUES (NOW(), NOW(), NOW(), ('2021-01-01', '15:26:25', '2021-1-1 15:26:25'); SELECT * FROM test;
4. 常用的文本类型
(1) 两个类型
类型 | 对于长度len | 特点 | 空间 | 效率 |
---|---|---|---|---|
char(len) | 可以省略不写,默认为1 | 固定长度的字符串 | 比较耗费空间 | 效率高 |
varchar(len) | 不可以省略 | 可变长度的字符串 | 比较节省空间 | 效率低 |
(2) 参数’len’
- 表示想要保存的最大字符数
- 如果不够,正常显示
- 如果超出,从字符串后面截断
- 一个数字、一个字符、一个汉字,均占一个长度
(3) 代码演示
DROP TABLE IF EXISTS test; CREATE TABLE test ( s1 CHAR, s2 CHAR(5), s3 VARCHAR(5) ); INSERT INTO test VALUES ('123456', '123456', '123456'); SELECT * FROM test;
5. 不常用的文本类型
(1) blob类型
- 保存图片专用的,通过JDBC进行操作
- 对于图片,一般保存它的链接地址,链接到图床当中
(2) enum枚举类型
- 不区分大小写
- 如果枚举列表中没有要插入的值,则插入空值
- 插入的数据只可以是枚举列表中的一个
- 可以插入整数’n’,代表在枚举列表中元素的序号,从1开始
- 语法:ENUM(枚举1, 枚举2, … , 枚举n)
(3) set集合类型
- 不区分大小写
- 如果集合列表中不存在插入的值,则插入空值
- 只可以选择set集合中的一个或多个
- 语法:SET(元素1, 元素2, … , 元素n)
(4) 代码演示
DROP TABLE IF EXISTS test; CREATE TABLE test ( enums ENUM('a', 'b', 'c'), sets SET ('a', 'b', 'c') ); INSERT INTO test VALUES (2, 'a'), # b a (1, 'b'), # a b (5, 'a'), # null a ('b', 'b'); # b b SELECT * FROM test;
05、常用的函数
1. 字符函数
# 1. length():获取参数的字节个数 SELECT LENGTH('aaa'); # 一个字母占一个字节(utf8) SELECT LENGTH('中国人'); # 一个中文3个字节(utf8) # 2. upper()、lower():大小写转换 SELECT UPPER('Abc'); # ABC SELECT LOWER('Abc'); # abc # 3. concat():拼接字符串 SELECT CONCAT('aaa', 'bbb'); # aaabbb SELECT CONCAT('a', 'b', 'c'); # abc # 4. trim():去掉前后字符(默认去掉空格,可以指定去掉前后字符) SELECT LENGTH(' abc '); # 5 SELECT LENGTH(TRIM(' abc ')); # 3【默认去掉空格】 SELECT TRIM('a' FROM 'aaaa1234aa'); # 1234【去掉字符串前后两边的字符'a'】 # 5. instr(str1, str2):返回str2在str1中第一次出现的索引,找不到返回0(索引从1开始) SELECT INSTR('123456_123456', '123'); # 1 SELECT INSTR('123456_123456', '_123456'); # 7 SELECT INSTR('123456_123456', '0123'); # 0 # 6. replace(str, a, b) 将str中的a全部替换成b SELECT REPLACE('你是大XX,你个XX', 'XX', '***'); # 7. substr(str, pos, [len]):截取字符串【或者:substring(str, pos, [len])】 SELECT SUBSTR('12345', 1); # 12345 【截取字符串[pos - last](索引从1开始)】 SELECT SUBSTR('12345', 2); # 2345 SELECT SUBSTR('123456789', 1, 1); # 1 【截取字符串[pos - (pos + len - 1)](索引从1开始)】 SELECT SUBSTR('123456789', 1, 3); # 123 # 8. 字符串填充【lpad(str, len, chr)、rpad(str, len, chr)】 # 不够->补,按方向补指定的字符 # 超出->截,均在右边截断 # lpad():左填充 SELECT LPAD('wangks', 8, '+'); # ++wangks【在左边补充2个字符'+',使其长度为8】 SELECT LPAD('wangks', 5, '+'); # wangk【截断右边的字符's',使其长度为5】 # rpad():右填充 SELECT RPAD('wangks', 8, '+'); # wangks++【在右边补充2个字符'+',使其长度为8】 SELECT RPAD('wangks', 5, '+'); # wangk【截取右边的字符's',使其长度为5】
2. 数学函数
# 1. 绝对值【abs(s)】 SELECT ABS(-1), ABS(1); # 2. 平方根【sqrt(x)】 SELECT SQRT(4), TRUNCATE(SQRT(5), 5); # 3. 求余【mod(a, b):结果的正负由 a 决定】 SELECT MOD(12, 5); # 2 SELECT MOD(-12, 5); # -2 SELECT MOD(-12, -5); # -2 SELECT MOD(12, -5); # 2 # 4. 幂运算【pow(a, b)】 SELECT POW(2, 4); SELECT POW(2, 10); # 5. 数字截断,直接截断小数点指定位数后面的数【truncate(x, len)】 SELECT TRUNCATE(1.699, 2); # 1.69 SELECT TRUNCATE(1.699, 0); # 1 # 6. 四舍五入【round(x)、round(x, len)】 SELECT ROUND(1.1); # 1【直接保留到整数位】 SELECT ROUND(1.568, 2); # 1.57【指定小数点保留的位数】 # 7. PI的使用【pi():默认显示后6位】 SELECT PI(); # 8. ceil 向上取整,返回 >=本身 的 最小整数 SELECT CEIL(1.1); # 2 SELECT CEIL(1.0); # 1 # 9. floor 向下取整,返回 <=本身 的 最大整数 SELECT FLOOR(1.1); # 1 SELECT FLOOR(1.0); # 1
3. 日期函数
# 1. 【now():返回当前系统的 日期和时间】 SELECT NOW(); # 2. 【curdate():返回当前系统的 日期】 SELECT CURDATE(); # 3. 【curtime():返回当前系统的 时间】 SELECT CURTIME(); # 4. 获取指定时间的年、月、日、时、分、秒 SELECT YEAR(NOW()); # 获取参数 的 年 SELECT YEAR('1212-5-5'); # 1212 SELECT MONTH(NOW()); # 获取参数 的 月 SELECT MONTH('1212-5-5'); # 1212 SELECT DAY(NOW()); # 获取参数 的 日 SELECT MONTH('1212-5-5'); # 5 SELECT HOUR(NOW()); # 获取参数 的 时 SELECT HOUR('2021-08-17 18:49:58'); # 18 SELECT MINUTE(NOW()); # 获取参数 的 分 SELECT MINUTE('2021-08-17 18:49:58'); # 49 SELECT SECOND(NOW()); # 获取参数 的 秒 SELECT SECOND('2021-08-17 18:49:58'); # 58 # 5. 【DATEDIFF(d1, d2):返回两日期之间的天数之差,d1 - d2】 SELECT DATEDIFF('2001-12-15', NOW()); # 7148 /* %Y:年,4位数的年 %m:月,01 02 03... %d:日,01 02 03... %H:时,24小时制 %i:分,00 01 02... %s:秒,00 01 02... -------------------------- %y:年,2位数的年 %c:月,1 2 3 4.... %h:时,12小时制 */ # 6. 【date_format(date, str):日期 --> 字符串】 SELECT DATE_FORMAT(NOW(), '%Y--%d--%m'); SELECT DATE_FORMAT(NOW(), '%Y年%m月%d日'); # 7. 【str_to_date(str1, tr2):字符串 --> 日期 SELECT STR_TO_DATE('12++2001++29', '%m++%Y++%d'); # 2001-12-29 SELECT STR_TO_DATE('2021年9月7日 8点2分0秒', '%Y年%m月%d日 %H点%i分%s秒'); # 2021-09-07 08:02:00
4. 多行函数
- 对非数值类型使用多行函数时,不会报错,但是无意义,应当作错误处理
# 1. sum、avg、max、min【求和、平均值、最大值、最小值】 SELECT SUM(salary) FROM employees; SELECT AVG(salary) FROM employees; SELECT MAX(salary) FROM employees; SELECT MIN(salary) FROM employees; # 2. count【求个数,count(*)效率较好,绝对的忽略null值】 SELECT COUNT(*) FROM employees; # 求该表共有几行 SELECT COUNT(`commission_pct`) FROM employees; # 求有几行,但是参数为null的行不计算 SELECT COUNT(1) FROM employees; # 新增一列,每行的新列都是1,统计1的个数,即实现了统计行数 SELECT COUNT(2) FROM employees; # 新增一列,每行的新列都是2,统计2的个数,即实现了统计行数 SELECT COUNT('++--') FROM employees; # 新增一列,每行的新列都是++--,统计++--的个数,即实现了统计行数 # 3. continct 去重 SELECT COUNT(DISTINCT `job_id`) FROM employees; # 统计有多少个部门,先对部门id去重,求有多少行 SELECT DISTINCT IFNULL(department_id, 'xxx') FROM employees; # 查找员工表里面所有的部门id
5. 其他函数
# 1. 别名函数【as 或 空格】 SELECT POW(2, 10) AS 幂次方; SELECT MOD(51, 2); 取余 # 2. 设置字符集 SET NAMES gbk; SET NAMES utf8; # 3. 查看版本号 SELECT VERSION(); # 5.5.54 # 4. 代表当前用户 SELECT USER(); # 5. IFNULL(a, b) 当a为null时返回b,否则返回a SELECT IFNULL(NULL, '是null'); SELECT IFNULL(NULL, '是null'); # 6. 另类的加号‘+’【在MySQL中,‘+’仅表示运算符的加号】 /* 6.1 两个数值型,直接相加 6.2 有字符型,将其转换成数字型,如果成功,继续加法运算,否则将字符型转换成0 6.3 如果其中有一个null,则结果一定为null */ SELECT 100 + 100; # 200 SELECT 100 + 100 + NULL; # null SELECT 100 + 100 + '123'; # 323 SELECT 100 + 100 + 'abc'; # 200 # 7. 查看创建表时的SQL语句:【show create table 表名】 SHOW CREATE TABLE test;
06、常见约束、标识列
1. 六大约束
- 用于限制表中的数据,保证表中数据的一致性
- 外键的特点
- 设置外键约束的表叫做从表,与其关联的表叫做主表
- 从表的那一个字段的类型要与主表那一个字段的类型 一致或兼容
- 要求主表的关联列必须是一个key(主键、唯一键)
- 插入数据时,先插入主表,在插入从表
- 删除数据时,先删除从表,在删除主表
- 修改、删除主表时,必须先删除外键的关系
类型 | 说明 | 级别 | 常用级别 |
---|---|---|---|
not null(非空约束) | 该字段的值不可以为空 | 列级 | 列级 |
default(默认约束) | 该字段有默认的值 | 列级 | 列级 |
primary key(主键约束) | 该字段的值具有唯一性、非空性【一个表中,最多有1个主键】 | 列级、表级 | 列级 |
unique(唯一约束) | 该字段的值具有唯一性,但是可以为空 | 列级、表级 | 表级 |
check(检查约束) | mysql中不支持 | 无 | 无 |
foreign key(外键约束) | 该字段的值必须来自主表的关联列的值 | 表级 | 表级 |
2. 标识列
- 含义:又称为自增长列,可以不用手动的插入值,系统会提供默认的序列值
- 语法:【字段名 类型 约束 auto_increment】
- 特点
- 一个表只可以有一个标识列【※】
- 标识符可以和 是key的列 搭配
- 标识列的类型,只可以是 数值型,一般是int
- 标识列可以通过 set auto_increment_increment=n; 设置步长
- 第一条插入的数据如果没有指定标识列的值的话,默认为1
- 可以通过手动插入第一条数据,来设置标识列的起始值
3. 约束的使用
(1) 创建表时添加约束
# 主表 DROP TABLE IF EXISTS otherTable; CREATE TABLE IF NOT EXISTS otherTable ( id INT, UNIQUE KEY (id) ); # 从表 DROP TABLE IF EXISTS stuinfo; CREATE TABLE IF NOT EXISTS stuinfo ( `id` INT(20), # 主键 `name` VARCHAR(50) NOT NULL, `nationals` VARCHAR(20) NOT NULL DEFAULT 'Chines', `age` INT(20) NOT NULL DEFAULT 999, `numbers` VARCHAR(30), # 唯一键 `majorId` INT, # 外键 PRIMARY KEY `bieming1` (id), # 起别名、表级约束 UNIQUE KEY `bieming2` (numbers), # 起别名、表级约束 CONSTRAINT fk_stuinfo_otherTable FOREIGN KEY(`majorId`) REFERENCES otherTable(id) # 外键的别名:fk_从表的名字_主表的名字 );
(2) 修改表时修改约束
- 可以从无到有,也可以从有到无,或者是修改
- 两种级别的写法
- 列级约束
- 不支持起名字
- ALTER TABLE 表名 MODIFY COLUMN 字段名 类型 约束类型;
- 表级约束
- 支持起名字
- ALTER TABLE 表名 ADD 【contraint 别名】 约束类型(字段名) 【外键的引用】;
- 列级约束
# 主表 DROP TABLE IF EXISTS otherTable; CREATE TABLE IF NOT EXISTS otherTable ( id INT, UNIQUE KEY(id) ); # 从表 DROP TABLE IF EXISTS stuinfo; CREATE TABLE IF NOT EXISTS stuinfo ( `id` INT(20) UNIQUE, # 主键 `name` VARCHAR(50), # 非空 `nationals` VARCHAR(20), # 默认 `numbers` VARCHAR(30), # 唯一 `majorId` INT # 外键 ); # ==================================================================================== # 1. 非空约束 ALTER TABLE stuinfo MODIFY COLUMN `name` VARCHAR(20) NOT NULL; # 列级 # 2. 默认约束 ALTER TABLE stuinfo MODIFY COLUMN `nationals` VARCHAR(20) DEFAULT 'Chines'; # 列级 # 3. 主键 ALTER TABLE stuinfo ADD PRIMARY KEY(id); # 表级 # 4. 唯一键 ALTER TABLE stuinfo ADD UNIQUE KEY(numbers); # 表级 ALTER TABLE stuinfo ADD CONSTRAINT `otherName1` UNIQUE KEY(numbers); # 表级 # 5. 外键 ALTER TABLE stuinfo ADD FOREIGN KEY(majorId) REFERENCES major(id); # 表级 ALTER TABLE stuinfo ADD CONSTRAINT fk_stuinfo_major FOREIGN KEY(majorId) REFERENCES otherTable(id); # 表级
(3) 修改表时删除约束
# 主表 DROP TABLE IF EXISTS otherTable; CREATE TABLE IF NOT EXISTS otherTable ( id INT, UNIQUE KEY(id) ); # 从表 DROP TABLE IF EXISTS stuinfo; CREATE TABLE IF NOT EXISTS stuinfo ( `id` INT(20), # 主键 `name` VARCHAR(50) NOT NULL, `nationals` VARCHAR(20) NOT NULL DEFAULT 'Chines', `age` INT(20) NOT NULL DEFAULT 999, `numbers` VARCHAR(30), # 唯一键 `majorId` INT, # 外键 PRIMARY KEY `bieming1` (id), # 起别名、表级约束 UNIQUE KEY `bieming2` (numbers), # 起别名、表级约束 CONSTRAINT fk_stuinfo_otherTable FOREIGN KEY(`majorId`) REFERENCES otherTable(id) # 外键的别名:fk_从表的名字_主表的名字 ); # ==================================================================================== # 1. 删除非空 ALTER TABLE stuinfo MODIFY COLUMN `name` VARCHAR(20); ALTER TABLE stuinfo MODIFY COLUMN `name` VARCHAR(20) NULL; # 2. 删除默认 ALTER TABLE stuinfo MODIFY COLUMN `nationals` INT; ALTER TABLE stuinfo MODIFY COLUMN `nationals` INT NULL; # 3. 删除主键 ALTER TABLE stuinfo DROP PRIMARY KEY; # 4. 删除唯一键【未成功】 ALTER TABLE stuinfo DROP INDEX numbers; # 5. 删除外键约束【未成功】 ALTER TABLE stuinfo DROP CONSTRAINT fk_stuinfo_otherTable;
4. 标识列(自增长列)的使用
# 1. 创建表时添加标识列 DROP TABLE IF EXISTS autos; CREATE TABLE autos ( `id` INT AUTO_INCREMENT, `name` VARCHAR(20) NOT NULL, PRIMARY KEY(`id`) ); # 2. 修改表时添加标识列 ALTER TABLE autos MODIFY COLUMN `id` INT PRIMARY KEY AUTO_INCREMENT; # 3. 修改表时删除标识列 ALTER TABLE autos MODIFY COLUMN id INT PRIMARY KEY; # 4. 设置步长 SET auto_increment_increment = 2; # 6. 清空所有数据时,有自增长字段 DELETE FROM autos; # 下次插入数据时,自增长列的值依然从断点处自增 TRUNCATE TABLE autos; # 下次插入数据时,自增长列的值从1开始
07、表的管理
1. 常用的简单操作
# 1. 查看当前库中所有的表 SHOW TABLES; # 2. 查看创建表时的SQL语句:【show create table 表名】 SHOW CREATE TABLE stuinfo; # 3. 清空表 TRUNCATE TABLE stuinfo; DELETE FROM stuinfo;
2. 表的管理操作
# 1. 创建 Book表 CREATE TABLE books( id INT, bName VARCHAR(20), price DOUBLE, authorId VARCHAR(20), publishDate DATETIME ); # 2. 修改字段名:要求修改字段名的时候,一定要加上字段的数据类型 ALTER TABLE books CHANGE COLUMN publishDate pubDate DATETIME; # 3. 修改字段的类型、约束、标识列 ALTER TABLE books MODIFY COLUMN `id` INT; ALTER TABLE books MODIFY COLUMN `id` INT PRIMARY KEY AUTO_INCREMENT; # 注意:标识列只可以和键级约束搭配 # 4. 添加新字段 ALTER TABLE books ADD COLUMN price DOUBLE DEFAULT 0; # 5. 删除字段 ALTER TABLE books DROP COLUMN price; # 6. 修改表名 ALTER TABLE books RENAME TO books_; # 7. 表的删除 DROP TABLE IF EXISTS books; # 8. 表的复制【用到的时候再查】
08、数据的增删改
# 1. 插入数据 INSERT INTO tab_date(`id`, `name`) VALUES(1, 'Tom'); INSERT INTO tab_date VALUES(2, 'Jarry'); INSERT INTO tab_date SET `id` = 3, `name` = 'Jacck'; # 2. 修改单表的数据 UPDATE tab_date SET `name` = 'Toms' WHERE `id` = 1; UPDATE tab_date SET `name` = 'Tom' WHERE `id` = 1; # 3. 修改多表的数据 # 案例 -- 将id=4的男生的女朋友的手机号修改为'12345654321' UPDATE beauty b LEFT JOIN boys bo ON b.`boyfriend_id` = bo.`id` SET b.phone = 'xxxxx' WHERE bo.id = 4; # 4. 删除单表的一条数据 DELETE FROM tab_date WHERE id = 1; # 5. 清空数据 TRUNCATE tab_date; # 6. delete和truncate的区别 /* 1. delete 可以加WHERE 条件,TRUNCATE不能加 2. truncate删除,效率高一点点 3. 假如要删除的表中有自增长列 -- 用DELETE删除后, 再次插入数据,自增长列的值从断点开始 -- 用TRUNCATE删除后,再次插入数据,自增长列的值从1开始 4. truncate删除没有返回值,DELETE删除有返回值 5. truncate删除不能回滚,DELETE删除可以回滚 */ # 7. 删除和A表的一条数据有关的B表中的记录【多表删除】 /* 【sql92语法】 delete a, b frOM 表1, 表2 on 连接条件 wherE 筛选条件 【sql99语法】 delete a, b from 表1 (inner|lefT|RIGhT) JoIN 表2 ON 连接条件 where 筛选条件 */ # sql99:可以只删一个表,也可以两个表都删除 DELETE be FROM boys b INNER JOIN beauty be ON b.id = be.boy_id WHERE b.id = 1; # sql92:只可以实现两个表都删除 DELETE be, b FROM beauty be, boys b ON b.id = be.boy_id WHERE b.id = 1;
09、数据库的备份
# 方式1:直接拷贝物理文件 # 方式2:在SQLyog工具中手动导出 1. 在想要导出的表或库 右键 选中导出 2. 一般限制导出 结构 和 数据 # 方式3:使用命令行 1. 导入 # 导入一个表 # 1. 登录服务 # 2. 选择库 # 3. source 备份文件 # 导入一个库 # 1. 登录 # 2. 直接导入库 2. 导出【mysqldump:不是SQL命令,故不可以登录sql之后再使用此命令】 # 2.1 导出一个表 # mysqldump -h主机 -u用户名 -p 库 表 > 地址 mysqldump -hlocalhost -uroot -p pdsu other > D:/a.sql # 2.2 导出多个表 # mysqldump -h主机 -u用户名 -p 库 表1 表2 表3 > 地址 mysqldump -hlocalhost -uroot -p pdsu other otherTable > D:/a.sql # 2.3 导出一个库 # mysqldump -h主机 -u用户名 -p 库 > 地址 mysqldump -hlocalhost -uroot -p pdsu > D:/a.sql
10、MD5加密(单向加密,不可恢复)
DROP TABLE IF EXISTS tab_md5; CREATE TABLE IF NOT EXISTS tab_md5 ( `id` INT(20), `pwd` VARCHAR(50) ); # 1. 插入明文 INSERT INTO tab_md5 VALUES (1, '123'), (2, '123456'); # 2. 插入密文 INSERT INTO tab_md5 VALUES (3, MD5('123')), (4, MD5('123456')); # 3. 明文与密文的校验 SELECT * FROM tab_md5 WHERE `id` = 4 AND `pwd` = MD5('123456'); # 4. 修改明文为密文 UPDATE tab_md5 SET `pwd` = MD5(`pwd`) WHERE id = 1; # --- 修改单独一个 UPDATE tab_md5 SET `pwd` = MD5(`pwd`); # --- 修改全部
11、用户管理
# 用户管理的本质:对MySQL库下面的user表进行增删查改 # 1. 方式一:SQLyog可视化管理 # 2. 方式二:cmd # 1. 创建用户 CREATE USER wangks IDENTIFIED BY '123456'; # 2. 修改当前用户密码 SET PASSWORD = PASSWORD('7810'); # 3. 修改指定用户密码 SET PASSWORD FOR wangks = PASSWORD('123456'); # 4. 用户重命名 RENAME USER wangks TO newwangks; # 5. 删除用户 DROP newwangks; # 6. 授予用户部权限【除了不可以给别人这种权限,其余和root一样】 GRANT ALL PRIVILEGES ON *.* TO wangks1; # 7. 查看指定用户的权限 SHOW GRANTS FOR newwangks; # 8. 查看管理员权限 SHOW GRANTS FOR root@localhost;
12、数据库的设计
一、糟糕的数据库 1. 数据冗余,浪费空间 2. 数据库的插入和删除麻烦 3. 可能有异常 4. 性能差 二、良好的数据库 1. 节省内存空间 2. 保证数据库的完整性 3. 方便我们开发系统 三、三大范式 1. 第一范式:要求数据库的每一列都是不可分割的原子数据项【原子性】 2. 第二范式: 前提:满足第一范式 确保数据表的每个字段和主键相关,而不能只与主键的某一部分相关 每张表只描述一件事情 3. 第三范式: 前提:满足第一、第二范式 确保数据表的每个字段必须和主键直接相关,而不可以间接相关 四、三大范式目的:规范数据库的设计,但是为了性能,有时故意设置冗余字段
这篇关于MySQL的简单总结的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-25如何部署MySQL集群资料:新手入门教程
- 2024-12-24MySQL集群部署资料:新手入门教程
- 2024-12-24MySQL集群资料详解:新手入门教程
- 2024-12-24MySQL集群部署入门教程
- 2024-12-24部署MySQL集群学习:新手入门教程
- 2024-12-24部署MySQL集群入门:一步一步搭建指南
- 2024-12-07MySQL读写分离入门:轻松掌握数据库读写分离技术
- 2024-12-07MySQL读写分离入门教程
- 2024-12-07MySQL分库分表入门详解
- 2024-12-07MySQL分库分表入门指南