mysql常用操作(一)
【数据库设计的三大范式】
1、第一范式(1NF):数据表中的每一列,必须是不可拆分的最小单元。也就是确保每一列的原子性。
例如:userInfo:'山东省烟台市 18865518189' 应拆分成 userAds='山东省烟台市' userTel='18865518189'
2、第二范式(2NF):满足1NF后,要求:表中的所有列都必须依赖于主键,而不能有任何一列与主键没有关系,也就是说,一个表只描述一件事情;
例如:订单表,只能描述订单相关的信息,所以所有的字段都必须与订单ID相关
产品表,只能描述产品相关的信息,所以所有的字段都必须与产品ID相关
因此,不能在一张表中同时出现订单信息与产品信息
3、第三范式(1NF):满足2NF后,要求:表中每一列都要与主键直接相关,而不是间接相关,(表中的每一列,
只能依赖于主键)
例如:订单表中,需要有客户相关信息,在分离出客户表之后,订单表中,只需要有一个客户id即可。
而不能有其他的客户信息。因为其他的用户信息是直接关联于用户ID,而不是关联于订单ID
【第二范式与第三范式的本质区别】
在于有没有分出两张表,第二范式是说一张表中包含了多种不同实体的属性,必须要分成多张表,
第三范式是要求已经分好了多张表的话,那么一张表中只能有另一张表的ID,而不能有其他的任何信息,(其他的任何信息,一律用主键在另一张表查询)
创建表
CREATE TABLE IF NOT EXISTS tb1(
id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
`name` VARCHAR(255) NOT NULL,
age SMALLINT UNIQUE,
height DOUBLE(3,2) DEFAULT 1.2
-- PRIMARY KEY(id)
);
定义列:列名 数据类型 列定义关键字
name是系统关键字,所以使用反引号包裹
IF NOT EXISTS可以省略,省略后若表已存在,重复创建时会报错
常见的列定义关键字:
UNSIGNED: 设置列 为 无符号列,只能设置类型为数字类型的列
PRIMARY KEY:设置主键约束
AUTO_INCREMENT:设置为自动增长列,自动增长列必须是主键
【主键】
1、主键的注意事项:主键默认非空!只有逐渐才能设置自动增长(逐渐不一定自增,自增一定是主键)
2、设置方式:① 在列定义是设置:id INT UNSIGNED PRIMARY KEY
② 在列定义完成后设置:PRIMARY KEY(id)
PRIMARY KEY:设置主键约束
NOT NULL:设置列为非空约束
UNIQUE:设置唯一性约束。该字段不能出现重复值
DEFAULT:设置默认值约束,height DOUBLE(3,2) DEFAULT 1.2 height如果不输入,默认1.2
FOREIGN KEY:设置外键约束。
【外键】
1、设置外键有哪些注意事项?
① 只有INNODB的数据库引擎支持外键,修改my.ini文件
② 外键与参照列的数据类型必须相同(数值型要求长度和无符号都相同,字符串要求类型相同,长度可不同)
③ 设置外键的字段必须要有索引,如果没有索引,设置外键时会自动生成索引,删除该外键时,需删除索引
2、设置外键的语法
[CONSTRAINT 外键名] FOREIGN KEY(外键字段) REFERENCES 参照表(参照字段)[ON DELETE SET NULL ON UPDATE CASCADE]-- 设置参照完整性
3、外键约束的参照操作
参照操作:当对参照表的参照字段进行删除或更新时,外检表中的外键如何应对。
参照操作可选值:RESTRICT 拒绝参照表删除或更新参照字段
NO ACTION 与 RESTRICT相同,但这个指令只在MySQL有效
CASCADE 删除或更新参照表的参照字段时,外键表的记录同步删除更新
SET NULL 删除或更新参照表的参照字段时,外键表的外键设为NULL
-- 修改表名 ALTER TABLE 旧表名 RENAME [TO] 新表名;
ALTER TABLE tb2 RENAME TO tb3; -- 同时修改多表 RENAME TABLE tb3 TO tb1[,`USER` to user1];
RENAME TABLE tb3 TO tb1,`USER` to user1; -- 修改字段 列
-- ALTER TABLE 表名 CHANGE 旧列名 新列名 列定义 [FIRST|AFTER 某一列];
-- FIRET:将这个字段调整为表格第一列 AFTER 某一列:将这个字段放到某一列后面
ALTER TABLE tb1 CHANGE `name` `username` VARCHAR(200) NOT NULL AFTER age; -- 只修改列定义,不能改名
ALTER TABLE tb1 MODIFY `username` VARCHAR(200) NOT NULL AFTER age; -- 删除表中某一列
ALTER TABLE tb1 DROP height; -- 新增一列,default可选,往后可选
ALTER TABLE tb1 ADD height DOUBLE(8,2) DEFAULT 1.2 AFTER age; -- 新增多列,不能调整列的位置,只能插在最后
ALTER TABLE tb1 ADD(
weight DOUBLE(3,2) UNSIGNED,
school VARCHAR(255)
); -- 增加主键约束
ALTER TABLE tb1 ADD PRIMARY KEY(id); -- 删除主键约束
ALTER TABLE tb1 DROP PRIMARY KEY; -- 添加唯一性约束
ALTER TABLE tb1 ADD UNIQUE KEY(username); -- 删除唯一性约束:由于创建唯一性约束会默认创建索引,所以删除时,需删除索引
ALTER TABLE tb1 DROP INDEX username; -- 设置默认值约束
ALTER TABLE tb1 ALTER age SET DEFAULT 20; -- 删除默认值约束
ALTER TABLE tb1 ALTER age DROP DEFAULT; -- 设置外键约束:ALTER TABLE tb1 ADD FOREIGN KEY(clsid) REFERENCES classes(id) [ON DELETE SET NULL ON UPDATE CASCADE]; ALTER TABLE tb1 ADD FOREIGN KEY(clsid) REFERENCES classes(id) ON DELETE SET NULL ON UPDATE CASCADE; -- 删除外键约束,由于创建外键时会默认创建索引,所以删除外键后,要删除索引
ALTER TABLE tb1 DROP FOREIGN KEY user_fk_classes;
ALTER TABLE tb1 DROP INDEX user_fk_classes;
【SQL语句的组成】
DML 数据操作语言(插入、删除和修改数据库中的数据) INSERT UPDATE DELETE
DQL 数据查询语言(用来查询数据库中的数据) SELECT
DCL 数据控制语言(用来控制存取许可、存取权限等) GRANT REVOKE
DDL 数据定义语言(用来建立数据库、数据库对象和定义表的列) CREATE DROP
-- 数据插入语句 INSERT
-- INSERT [INTO] 表名 [列名] VALUES (列值)[,(列值),……]
-- 注意:如果省略列名,则后面的列值必须为所有的列赋值,包括自增列和默认列;如果不省略列名,则后面的列值需要与前面的列名一一对应;并且需要给所有非NULL列赋值
INSERT INTO tb1 (username,age,sex) VALUES ("张三",12,"女");
INSERT tb1 VALUES (7,"张三",12,"女");
INSERT INTO tb1 (username,age,sex) VALUES ("张三",12,"女"),("张三",12,"女");
INSERT INTO tb1 (username,age,sex) VALUES ("张张",12,"女");
-- 数据更新语句
-- UPDATE 表名 SET 列名=列值[,列名=列值,……] [WHILE 条件]
-- WHERE条件可以省略,但是表示修改表中所有的行
UPDATE tb1 SET sex="男"
UPDATE tb1 SET username="李二狗",age=18,sex="女" WHERE id=8
【常见where条件判断】
1、关系运算符:> < <> = != >= <=
2、逻辑运算:NOT AND OR
3、ISNULL(字段) 检测是否为空
SELECT * FROM tb1 WHERE ISNULL(age); --所有年龄为空的用户
4、BETWEEN …… AND ……介于两个值之间
SELECT * FROM tb1 WHERE age BETWEEN 10 AND 13;
5、IN 在某些值之间的数据
SELECT * FROM tb1 WHERE id in(1,3,5,7,9);
6、LIKE :相似匹配
① 相似匹配时,使用%表示任意字符个数(0到多个)
SELECT * FROM tb1 WHERE username LIKE "张%"; 用张开头
SELECT * FROM tb1 WHERE username LIKE "%张%"; (任意位置包含张)
SELECT * FROM tb1 WHERE username LIKE "%张"; 用张结尾
② 相似匹配时,使用_表示一个字符的个数
SELECT * FROM tb1 WHERE username LIKE "_张%"; 第二个字是张
7、EXISTS(子查询语句):如果子查询语句返回数据>=1行,EXISTS返回true,否则返回false
SELECT * FROM tb1 WHERE EXISTS(SELECT * FROM tb2);--如果tb2返回至少1行数据,则条件成立,返回tb1
8、ALL(子查询):子查询返回的数据,需要全部满足,才能成立
SELECT * FROM tb1 WHERE username !=ALL(SELECT username FROM tb1 WHERE id>7);--用户名 不能等于 子查询返回用户名列表中的任意一个
9、ALL(子查询):子查询返回的数据,满足其中一个,即可成立
SELECT * FROM tb1 WHERE username =ANY(SELECT username FROM tb1 WHERE id>7);--用户名 等于 子查询返回用户名列表中的任意一个
删除表中数据
DELETE [FROM] tb1 WHERE username LIKE "_张%";
数据查询语句
SELECT 列名,[列名,……] FROM 表名 ORDER BY id 排序的列名 ASC/DESC;
SELECT * 表示查询所有字段
ORDER BY表示对查出的数据进行排序,必须在where后面
-- 列表达式
-- 根据已有的列,查询出来的结果,我们使用case结构虚拟出来的列,称为列表达式 -- AS关键字
-- 用于给列名起别名,AS关键字还可以省略
SELECT username AS '名字',sex AS '性别',age,( -- 给username列起别名“名字” , sex列起别名“性别”
CASE -- case表示判断的开始
WHEN sex="男" THEN 1 -- 如果查询出sex是男,则虚拟的列表达式的值就是1
WHEN sex="女" THEN 2
ELSE 3 -- 上面所有都不成立时,列表达式值为3
END -- END表示判断的结束
) AS sexno FROM tb1; -- 给虚拟出的这一列,起别名叫sexno -- DISTINCT 对查询后的结果去重(消除重复列)
mysql常用操作(一)的更多相关文章
- mysql常用操作语句
mysql常用操作语句 1.mysql -u root -p 2.mysql -h localhost -u root -p database_name 2.列出数据库: 1.show datab ...
- MySQL常用操作总结
MySQL常用操作 前提条件:已安装MySQL. 学习目标:用一条sql语句写出A和B的剩余数量 AA表 BB表 以上为一道面试题,接下来由这道面试题来回顾一些数据库的基本操作. 登录MySQL su ...
- centos LAMP第四部分mysql操作 忘记root密码 skip-innodb 配置慢查询日志 mysql常用操作 mysql常用操作 mysql备份与恢复 第二十二节课
centos LAMP第四部分mysql操作 忘记root密码 skip-innodb 配置慢查询日志 mysql常用操作 mysql常用操作 mysql备份与恢复 第二十二节课 mysq ...
- Windows平台下MySQL常用操作与命令
Windows平台下MySQL常用操作与命令 Windows平台下MySQL常用操作与命令,学习mysql的朋友可以参考下. 1.导出整个数据库 mysqldump -u 用户名 -p --defau ...
- MySQL常用操作2
MySQL常用操作2 判断函数 IF(expr, value1, value2) -- 如果表达式expr为true,则返回value1,否则返回value2 IFNULL(value1, val ...
- MYSQL常用操作函数的封装
1.mysql常用函数封装文件:mysql.func.php <?php /** * 连接MYSQL函数 * @param string $host * @param string $usern ...
- 第二篇 Mysql常用操作记录(转载)
我们在创建网站的时候,一般需要用到数据库.考虑到安全性,建议使用非root用户.常用命令如下: 1.新建用户 //登录MYSQL@>mysql -u root -p@>密码//创建用户my ...
- Linux 笔记 - 第十五章 MySQL 常用操作和 phpMyAdmin
博客地址:http://www.moonxy.com 一.前言 前面几章介绍了 MySQL 的安装和简单的配置,只会这些还不够,作为 Linux 系统管理员,我们还需要掌握一些基本的操作,以满足日常管 ...
- mysql常用操作及常见问题
常用操作 mysql备份: --整库备份 docker exec 容器ID mysqldump -uroot -p密码 --databases 库名 > 库名.sql --仅导出表和数据 mys ...
- mysql常用操作 mysql备份与恢复
先登录mysql ==>mysql -uroot -p 查看数据库的版本 select version(); 查看有哪些库 show datases; 查看当前处于哪个库 select da ...
随机推荐
- Windows Server 2016-Telnet 简介及安装
Telnet是基于请求注释(RFC)854的因特网标准程序和协议,该RFC规定了一种在网络上发送和接收未加密的ASCII字符(明文)的方法.Telnet包含两个功能模块:Telnet客户端和Telne ...
- RocketMQ4.3.X关于设置useEpollNativeSelector = true报错问题
前一阵子刚整理完RocketMQ4.3.x版本的相关配置的工作,接下来就来测试一下改变参数会带来什么好的结果 首先我就选中了useEpollNativeSelector 这个参数 默认这个参数是 fa ...
- react dnd demo2
import React, { Component } from 'react'; import './App.css'; import Card from './Card'; import HTML ...
- FreeHttp1.1升级说明
一.升级方法 下载新版本插件 https://files.cnblogs.com/files/lulianqi/FreeHttp1.1.zip 或 http://lulianqi.com/file/ ...
- js一些梳理
浏览器组成 1.Shell部分2.内核内核的组成 1.渲染引擎 负责页面显示 2.JS引擎 3. 其他模块主流内核介绍 >> * Trident(IE内核) >> * Geck ...
- 类System
System类简介: 在 System 类中提供了大量的静态方法,有标准输入.标准输出和错误输出流:对外部定义的属性和环境变量的访问:加载文件和库的方法:还有快速复制数组的一部分的实用方法. 常用方法 ...
- 浅谈css3有意思的属性pointer-events: none;
pointer-events: none: 可以让某个元素实现类似于海市蜃楼的效果,具体理解为,你可以看的到某个元素,但是你无法摸的着. 而display:none; 是你摸不着,但是你也看不见. ...
- Web项目中的 /
如果 / 出现在路径的前面: web.xml中:http://loclalhost:8080/项目名称/ 在项目的根路径下面 jsp中: http://localhost:8080/ ...
- Mysql 中的日期时间字符串查询
一.将数据库中的Date格式的数据,或者指定日期的字符串格式化为想要的样式 DATE_FORMAT (date, format)能根据格式串format 格式化日期或日期和时间值date,返回结果字符 ...
- c++ _pFirstBlock == pHead
今天写程序时碰到了这个异常,导致调试的程序卡死.在网上找了很久答案,都没解决.大致判定是对象被多次析构,但又确认程序逻辑没有问题. 后来参考了 http://www.cnblogs.com/qinta ...