罗湖网站制作公司,华为企业管理软件,网络营销教程,怎样查看网站点击量【数据库设计的三大范式】1、第一范式#xff08;1NF#xff09;#xff1a;数据表中的每一列#xff0c;必须是不可拆分的最小单元。也就是确保每一列的原子性。 例如#xff1a;userInfo:山东省烟台市 18865518189 应拆分成 userAds山东省烟台市 userTel188655181892、第…【数据库设计的三大范式】1、第一范式1NF数据表中的每一列必须是不可拆分的最小单元。也就是确保每一列的原子性。 例如userInfo:山东省烟台市 18865518189 应拆分成 userAds山东省烟台市 userTel188655181892、第二范式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 KEYidPRIMARY KEY:设置主键约束NOT NULL设置列为非空约束UNIQUE:设置唯一性约束。该字段不能出现重复值DEFAULT:设置默认值约束height DOUBLE(3,2) DEFAULT 1.2 height如果不输入默认1.2FOREIGN 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 数据查询语言用来查询数据库中的数据 SELECTDCL 数据控制语言用来控制存取许可、存取权限等 GRANT REVOKEDDL 数据定义语言用来建立数据库、数据库对象和定义表的列 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李二狗,age18,sex女 WHERE id8 【常见where条件判断】1、关系运算符 ! 2、逻辑运算NOT AND OR3、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行数据则条件成立返回tb18、ALL(子查询)子查询返回的数据需要全部满足才能成立 SELECT * FROM tb1 WHERE username !ALL(SELECT username FROM tb1 WHERE id7);--用户名 不能等于 子查询返回用户名列表中的任意一个9、ALL(子查询)子查询返回的数据满足其中一个即可成立 SELECT * FROM tb1 WHERE username ANY(SELECT username FROM tb1 WHERE id7);--用户名 等于 子查询返回用户名列表中的任意一个 删除表中数据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是男则虚拟的列表达式的值就是1WHEN sex女 THEN 2ELSE 3 -- 上面所有都不成立时列表达式值为3END -- END表示判断的结束
) AS sexno FROM tb1; -- 给虚拟出的这一列起别名叫sexno-- DISTINCT 对查询后的结果去重消除重复列 转载于:https://www.cnblogs.com/pandapang/p/7078304.html