zoukankan      html  css  js  c++  java
  • MySql学习04----数据库表的基本操作

    一. 创建数据表

    1. 创建数据表的语法规则如下:

    使用CREATE TABLE创建表时,必须指定以下信息:

    • 要创建的表的名称,不区分大小写,不可以使用SQL语言中的关键字;
    • 数据表中的每一个列(字段)的名称和数据类型,如果创建多个列,要用逗号隔开。

    note: 比如再创建一个User,则会提示错误,因为表名是不区分大小写的。

    2. 使用主键约束

    主键,又称为主码,是表中的一列或多列的组合。主键约束(Primary Key Consraint)要求主键列的数据唯一,并且不允许为空。主键能够唯一标识表中的一条数据,可以结合外键来定义不同数据表之间的关系,并且可以加快数据库查询的速度。主键分为两种类型:单字段主键和多字段联合主键。

    (1)单字段主键

    可以使用两种方法来创建这种主键:

    法一:在定义类的同时指定主键,语法规则如下:

    字段名 数据类型 PRIMARY KEY [默认值]

    法二:在定义完所有列之后指定主键,语法规则如下:

    [CONSTRANT <约束名>] PRIMARY KEY [字段名]

     

    (2)多字段联合主键

    语法规则:PRIMARY KEY [字段1,字段2,...,字段n] 

    note: 不可以在创建列的时候就指定多个primary key。会提示错误:

     3. 使用外键约束

    外键用来在两个表的数据之间建立链接,它可以是一列或者多列。一个表可以有一个或者多个外键。

    外键:首先它是表中的一个字段,它可以不是本表的主键,但对应另外一个表的主键。外键的主要作用是保证数据引用的完整性。定义外键后,不允许删除在另一个表中具有关联关系的行。外键的作用是保持数据的一致性、完整性。

    主表(父表):对于两个具有关联关系的表而言,相关联字段中主键所在的那个表即是主表

    从表(子表):对于两个具有关联关系的表而言,相关联字段中外键所在的那个表即是从表。

    创建外键的语法规则如下:

    [CONSTRAINT <外键名>] FOREIGN KEY 字段名1 [,字段名2,...] REFERENCES <主表名> 主键列1 [,主键列2,...]

    “外键名”为定义的外键约束的名称,一个表中不能有相同名称的外键;“字段名”表示子表需要添加外键约束的字段列;“主表名”即被子表外键所依赖的表的名称;“主键列”表示主表中定义的主键列,或者列组合。

    举例1:如果外键是主键

    假设有table1和table2

    举例2:如果外键不是主键

    举例3:references后面的一定要是主键,否则要报错

    说明:因为table1中的age并不是主键;

    举例4:有两个外键

    Note: 还是上面的table1,table2,table3.因为table2和table3都存在外键,和table1关联。倘若直接删除table1的话,就会报错,提示说“Cannot delete or update a parent row: a foreign key constraint fails”。因此,要想删除table1,就必须撤除和它主键间的关联,即消除table2和table3中的外键(依赖table1部分)。或者直接删除table2和table3后,直接删除table1就可以了。

     4. 使用非空约束

    非空约束指的是字段的值不能为空。对于使用了非空约束的字段,如果用户在添加数据时没有指定值,数据库系统会报错。

    非空约束的语法规则如下:

    字段名 数据类型 not null

    5. 使用唯一性约束

    唯一性约束要求该列唯一,允许为空,但是只能出现一个空值。唯一约束可以确保一列或者几列不出现重复值。

    唯一性约束的语法规则如下:

    (1)在定义完列之后直接指定唯一约束

    字段名 数据类型 unique

    (2)在定义完所有列之后指定唯一约束

    [CONSTRAINT <约束名>] unique (<字段名>)

    6. 使用默认约束

    默认约束指定某列的默认值。

    语法规则如下:

    字段名 数据类型 DEFAUTL 默认值

    7. 设置表的属性值自动增加

    在数据库应用中,经常希望在每次插入新纪录时,系统自动生成字段的主键值。可以通过为表主键添加AUTO_INCREMENT关键字来实现。默认的,在MySql中AUTO_INCREMENT的初始值为1,每新增加一条记录,字段值就自动加1.一个表只能有一个字段使用AUTO_INCREMENT约束,且该字段必须为主键的一部分。AUTO_INCREMENT约束的字段可以是任何整数类型(TNYINT、SMALLINT等)。

    语法规则如下:

    字段名 数据类型 AUTO_INCREMENT

    note:必须保证自增长的列是主键,否则要报错。

    二. 查看数据表结构

    可以通过DESCRIBE和SHOW CREATE TABLE语句。

    1. 查看表基本结构语句DESCRIBE

    2. 查看表详细结构语句SHOW CREATE TABLE

    加上G是为了显示结果更加直观。

    三. 修改数据表

    1. 修改表名

    ALTER TABLE <旧表名> RENAME [TO] <新表名>

    2. 修改字段的数据类型

    ALTER TABLE <表名> MODIFY <字段名> <数据类型>

    上面的字段名指的是需要修改的字段,数据类型指的是修改后字段的数据类型。

    3. 修改字段名

    ALTER TABLE <表名> CHANGE <旧字段名> <新字段名> <新数据类型>;

    4. 添加字段

    ALTER TABLE <表名> ADD <新字段名> <数据类型> [约束条件] [FIRST | AFTER 已存在字段名];

    方括号是可选参数。“FIRST”表示将新添加的字段设置为表的第一个字段;“AFTER"是将新添加的字段添加到指定的”已存在字段名“的后面。如果这两个参数没有说明,默认是放在数据表的最后列。

    5. 删除字段

    ALTER TABLE <表名> DROP <字段名>;

    6. 修改字段的排列位置

    ALTER TABLE <表名> MODIFY <字段1> <数据类型> FIRST|AFTER <字段2>;

    比如:

    想把b的类型修改了,且放在表的第一行:

    7. 修改表的存储引擎

    ALTER TABEL <表名> ENGINE <更改后的存储引擎名>

    8. 删除表的外键约束

    ALTER TABLE <表名> DROP FOREIGN KEY <外键约束名>

    这样,就可以删除user表了。因为person中的外键约束已经取消拉。

    四. 删除数据表

    1. 删除没有被关联的表

    DROP TABLE [IF EXISTS]表1,表2,...表n;

    2. 删除被其他表关联的主表

    数据表之间存在外键关联的情况下,如果直接删除父表,结果会显示失败。原因是直接删除,将破坏表的参照完整性。如果必须要删除,可以先删除与它关联的子表,在删除父表。但是,如果想要保留子表,只是需要单独删除父表,只需要将关联的表的外键的约束条件取消,然后就可以删除父表了。正如前面所将的那样。

    补充:

    1.MySql表创建好后添加外键:

    命令:alter table 需加外键的表 add constraint 外键名 foreign key(需加外键表的字段名) referencnes 关联表名(关联字段名); 

    注意:外键名不能重复

    参考文献

    《Mysql5.7从入门到精通》

  • 相关阅读:
    [导入]微软轻量级“代码生成器”—Repository Factory使用(上)
    数据结构练习(41)数组中三个只出现一次的数字
    数据结构练习(43)字符串的组合
    数据结构练习(37)复杂链表的复制
    数据结构练习(36)二叉树两结点的最低共同父结点
    数据结构练习(34)对称子字符串的最大长度
    数据结构练习(38)树的子结构
    数据结构练习(39)二叉树前中后序遍历的非递归实现
    数据结构练习(42)八皇后问题
    数据结构练习(35)数组中出现次数超过一半的数字
  • 原文地址:https://www.cnblogs.com/Hermioner/p/10310517.html
Copyright © 2011-2022 走看看