在MySQL中如何设置主键和外键工具/原料
电脑MySQL
方法/步骤
设置主键:
1、通过终端进入到mysql命令行工具 。
2、通过use关键字进行到目标数据库里 。
3、如原表已有主键,先把原来的主键删除掉 , 通过DROPPRIMARYKEY命令:ALTERTABLE`jingyan`DROPPRIMARYKEY; 。
4、主键已经没有了 。
5、通过命令:ADDPRIMARYKEY来添加ALTERTABLE`jingyan`ADDPRIMARYKEY(`id`) 。
6、输入后按下回车键即可看到queryok执行成功的字符 。
7、回到数据库的可视化工具,即可显示现在的表在id列上添加了主键了 。
设置外键:
1、创建好主从表 。
2、选择主表 , 点击设计表,进入到表设计界面 。
3、点击外键,进入到外键设置界面 。
4、先设置外键名称和选择主表的外键字段 。
5、然后在设置外键字段对应从表的数据库、表名和字 。
6、点击保存就完成外键设置了 。
请问,Mysql主关键字如何灵活设置?最简单直接的方便就是用sql语句把表重建一下
还有就是据我所知mysql的自增字段是可写的这和sqlserver不一样
你也可以自己往里写
mysql成绩表的关键字怎么设计为关键词赋值例如:<meta name=″keywords″ content=″学生成绩查询″>
<meta name=″keywords″ content=″语文,数学,英语″>
其中“keywords”为关键字 , “content”内容为关键字的属性 。
?
MySQL — 关键字和增删改查 来自MySQL的学习笔记,写的不对的地方大家多多指教哦
SELECT、DISTINCT、FROM、JOIN、ON、WHERE、GROUP BY、HAVING、SUM、COUNT、MAX、AVG、ORDER BY、LIMIT
SELECT-DISTINCT-FROM-JOIN-ON-WHERE-GROUP BY-HAVING-ORDER BY-LIMIT
必须字段:SELECT、FROM
可选字段:DISTINCT、JOIN、ON、WHERE、GROUP BY、HAVING、SUM、COUNT、MAX、AVG、ORDER BY、LIMIT
FROM-ON-JOIN-WHERE-GROUP BY(开始使用SELECT中的别名,后面的语句中都可以使用别名)-SUM、COUNT、MAX、AVG-HAVING-SELECT-DISTINCT-ORDER BY-LIMIT
FROM:从哪个表中检索数据
ON:关联条件 , 与join一起使用
JOIN:对需要关联的表进行关联
WHERE:过滤数据条件,执行顺序:自下而上、从右到左
GROUP BY:将过滤的数据进行分组,执行顺序:从左往右
SUM:求和
COUNT:数量统计
MAX:最大值
AVG:求平均值
HAVING:对分组的数据过滤条件,与group by一起使用
SELECT:查看结果集
DISTINCT:结果集去重
ORDER BY:排序,升序:ASC;降序:DESC
LIMIT:截取出目标页数据
详细用法会在后面进行补充
首先创建一张表,添加字段,表名字为:goodsmaster
添加数据的语法结构为:
添加数据可以是插入数据或插入查询的结果
1.1 插入数据
运行语句,查询结果:SELECT * FROM goodsmaster
部分字段有做非空约束,那么这边插入部分数据,验证下非空约束
上面的语句运行之后会报错,错误内容为“[Err] 1364 - Field 'barcode' doesn't have a default value”,即“barcode”这个字段有创建非空约束,表示这个字段不能为空,如果插入数据时不给这个字段赋值,那么就需要给它一个默认值 。
部分字段没有默认值,可以为空,那么现在验证一下插入数据时 , 这些字段不进行赋值会有什么结果
运行语句,查询结果:SELECT * FROM goodsmaster
仔细看会发现,上面的语句中插入数据也没有插入“itemnumber”字段,这个字段有添加主键约束,不能为空,但由于设置了自增约束,所以没有赋值也会自动在当前字段最大值 1,这就是自增约束;
上面的语句显示没有进行赋值的字段会默认显示Null 。
1.2 插入查询结果
MySQL 支持把查询的结果插入到数据表中,我们可以指定字段,甚至是数值,插入到数据表中 。
语法结构为:
删除语句使用DELETE删除,语法结构为:
删除记录可以使用WHERE来筛选删除的数据 , 下面为删除“barcode”字段数据为006的记录
由于部分数据可以为空,所以再删除的时候,WHERE的过滤条件必须用到主键约束或者唯一性约束的字段 。MySQL 的这种安全性设置,主要就是为了防止删除或者修改数据时出现误操作,导致删除或修改了不相关的数据 。
删除表中的全部数据
MySQL中用UPDATE来修改数据,语法结构为:
注意:不要修改主键字段的值 。因为主键是数据记录的唯一标识,如果修改了主键的值,就有可能会破坏数据的完整性 。
语法结构:
具体需要用到的关键字查看本文第一部分即可
MySQL 之 COLLATE 关键字 在mysql中执行show create table tablename指令,可以看到一张表的建表语句,example如下:
大部分字段我们都能看懂,但是今天要讨论的是COLLATE关键字 。这个值后面对应的utf8_unicode_ci是什么意思呢?面试的时候用这个题目考一考DBA,应该可以难倒一大部分人 。
使用phpmyadmin的开发可能会非常眼熟,因为其中的中文表头已经给出了答案:
phpmyadmin截图
所谓utf8_unicode_ci,其实是用来排序的规则 。对于mysql中那些字符类型的列,如VARCHAR,CHAR , TEXT类型的列,都需要有一个COLLATE类型来告知mysql如何对该列进行排序和比较 。简而言之,COLLATE会影响到ORDER BY语句的顺序,会影响到WHERE条件中大于小于号筛选出来的结果 , 会影响 DISTINCT 、 GROUP BY 、 HAVING 语句的查询结果 。另外,mysql建索引的时候,如果索引列是字符类型,也会影响索引创建,只不过这种影响我们感知不到 。总之,凡是涉及到字符类型比较或排序的地方,都会和COLLATE有关 。
COLLATE通常是和数据编码(CHARSET)相关的 , 一般来说每种CHARSET都有多种它所支持的COLLATE,并且每种CHARSET都指定一种COLLATE为默认值 。例如Latin1编码的默认COLLATE为latin1_swedish_ci,GBK编码的默认COLLATE为gbk_chinese_ci , utf8mb4编码的默认值为utf8mb4_general_ci 。
这里顺便讲个题外话,mysql中有utf8和utf8mb4两种编码,在mysql中请大家忘记 utf8,永远使用 utf8mb4。这是mysql的一个遗留问题,mysql中的utf8最多只能支持3bytes长度的字符编码 , 对于一些需要占据4bytes的文字,mysql的utf8就不支持了,要使用utf8mb4才行 。
很多COLLATE都带有_ci字样,这是Case Insensitive的缩写 , 即大小写无关,也就是说"A"和"a"在排序和比较的时候是一视同仁的 。selection * from table1 where field1="a"同样可以把field1为"A"的值选出来 。与此同时,对于那些_cs后缀的COLLATE , 则是Case Sensitive,即大小写敏感的 。
在mysql中使用show collation指令可以查看到mysql所支持的所有COLLATE 。以utf8mb4为例,该编码所支持的所有COLLATE如下图所示 。
首先 utf8mb4_bin 的比较方法其实就是直接将所有字符看作二进制串,然后从最高位往最低位比对 。所以很显然它是区分大小写的 。
而 utf8mb4_unicode_ci 和 utf8mb4_general_ci 对于中文和英文来说,其实是没有任何区别的 。对于我们开发的国内使用的系统来说,随便选哪个都行 。只是对于某些西方国家的字母来说,utf8mb4_unicode_ci 会比 utf8mb4_general_ci 更符合他们的语言习惯一些,general 是mysql一个比较老的标准了 。例如,德语字母 “?”,在 utf8mb4_unicode_ci 中是等价于 "ss" 两个字母的(这是符合德国人习惯的做法),而在 utf8mb4_general_ci 中 , 它却和字母 “s” 等价 。不过,这两种编码的那些微小的区别,对于正常的开发来说,很难感知到 。本身我们也很少直接用文字字段去排序,退一步说 , 即使这个字母排错了一两个,真的能给系统带来灾难性后果么?从网上找的各种帖子讨论来说 , 更多人推荐使用 utf8mb4_unicode_ci ,但是对于使用了默认值的系统,也并没有非常排斥,并不认为有什么大问题 。结论:推荐使用 utf8mb4_unicode_ci,对于已经用了 utf8mb4_general_ci 的系统 , 也没有必要花时间改造 。
另外需要注意的一点是,从mysql 8.0开始,mysql默认的 CHARSET 已经不再是 Latin1 了 , 改为了 utf8mb4 ( 参考链接 ),并且默认的COLLATE也改为了 utf8mb4_0900_ai_ci。utf8mb4_0900_ai_ci 大体上就是 unicode 的进一步细分,0900 指代unicode比较算法的编号( Unicode Collation Algorithm version) , ai 表示accent insensitive(发音无关),例如e, è, é, ê 和 ?是一视同仁的 。相关参考链接1 ,相关参考链接2
设置COLLATE可以在示例级别、库级别、表级别、列级别、以及SQL指定 。实例级别的COLLATE设置就是mysql配置文件或启动指令中的collation_connection系统变量 。
库级别设置COLLATE的语句如下:
CREATE DATABASE db_name DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
如果库级别没有设置CHARSET和COLLATE , 则库级别默认的CHARSET和COLLATE使用实例级别的设置 。在mysql8.0以下版本中,你如果什么都不修改,默认的CHARSET是Latin1,默认的COLLATE是latin1_swedish_ci 。从mysql8.0开始,默认的CHARSET已经改为了utf8mb4,默认的COLLATE改为了utf8mb4_0900_ai_ci 。
表级别的COLLATE设置,则是在CREATE TABLE的时候加上相关设置语句 , 例如:
如果表级别没有设置CHARSET和COLLATE,则表级别会继承库级别的CHARSET与COLLATE 。
列级别的设置 , 则在CREATE TABLE中声明列的时候指定,例如
如果列级别没有设置CHARSET和COLATE,则列级别会继承表级别的CHARSET与COLLATE 。
最后 , 你也可以在写SQL查询的时候显示声明COLLATE来覆盖任何库表列的COLLATE设置,不太常用,了解即可:
如果全都显示设置了,那么优先级顺序是 SQL语句列级别设置表级别设置库级别设置实例级别设置 。也就是说列上所指定的COLLATE可以覆盖表上指定的COLLATE,表上指定的COLLATE可以覆盖库级别的COLLATE 。如果没有指定 , 则继承下一级的设置 。即列上面没有指定COLLATE,则该列的COLLATE和表上设置的一样 。
以上就是关于mysql的COLLATE相关知识 。不过,在系统设计中,我们还是要尽量避免让系统严重依赖中文字段的排序结果,在mysql的查询中也应该尽量避免使用中文做查询条件 。
MYSQL中的COLLATE是什么?
【mysql怎么设关键字 mysql关键字是什么意思】关于mysql怎么设关键字和mysql关键字是什么意思的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。
推荐阅读
- 奥特曼格斗竞技场游戏下载,奥特曼格斗游戏最新
- oracle表空间创建慢2T,oracle19c创建表空间
- 幼儿角色扮演区游戏,幼儿角色扮演游戏观察记录与分析
- 台式机硬盘怎么接主板,台式机硬盘怎么接主板的
- php图片上传数据库显示 php 图片上传
- pg数据库自增主键如何归零,pg数据库设置自增
- 电脑无法设密码怎么办啊,电脑密码无法设置
- 包含如何固定excel某一行的词条
- mysql怎么放入新闻 mysql如何存文章