• mysql 二:操作表


    的存储。在操作表之前,首先要用选定数据库,因为表都是建立在对应的数据库里面的。在这里我们使用之前建立的test数据库

    mysql> use test;

    Database changed

    创建表的语法:

    Create table 表名(属性名 数据类型[完整性约束条件],属性名 数据类型[完整性约束条件],…..)

    这里创建一个example的表,其中包含三个元素,id,name,sex。其中id为整型,name为可变长度字符串,sex为bool值

    mysql> create table example(id INT,name VARCHAR(20),sex BOOLEAN);

    Query OK, 0 rows affected

    通过show tables来查看对应数据库的表格。

    mysql> show tables;

    +----------------+

    | Tables_in_test |

    +----------------+

    | example        |

    +----------------+

    1 row in set

    如果想查看表的结构,用desc example来查看。

    mysql> desc example;

    +-------+-------------+------+-----+---------+-------+

    | Field | Type        | Null | Key | Default | Extra |

    +-------+-------------+------+-----+---------+-------+

    | id    | int(11)     | YES  |     | NULL    |       |

    | name  | varchar(20) | YES  |     | NULL    |       |

    | sex   | tinyint(1)  | YES  |     | NULL    |       |

    +-------+-------------+------+-----+---------+-------+

    3 rows in set

    那么在反馈的结果中看到有Null, Key,Default这些字段。这些字段是什么意思呢,这些字段就是约束条件。是对字段属性的约束。我们来看下重新建立example表。其中在id后面天剑了not null primary key

    mysql> create table example(id INT not null primary key, name varchar(20),sex BOOLEAN);

    Query OK, 0 rows affected

    对应的表结构中也体现了对应的变化。

    mysql> desc example;

    +-------+-------------+------+-----+---------+-------+

    | Field | Type        | Null | Key | Default | Extra |

    +-------+-------------+------+-----+---------+-------+

    | id    | int(11)     | NO   | PRI | NULL    |       |

    | name  | varchar(20) | YES  |     | NULL    |       |

    | sex   | tinyint(1)  | YES  |     | NULL    |       |

    +-------+-------------+------+-----+---------+-------+

    3 rows in set

    表的约束条件有以下几个:

    1 primary key: 标识该属性为该表的主键,可以唯一标识对应的元组

    2 foreign key: 为该表的外键,是与之联系的某表的主键

    3 not null:表明该属性不能为空

    4 unique:标识该属性的值是唯一的。也就是不重复

    5 auto_increament:标识该属性为自动增加。也就是每次增加一行数据,该属性为自动加一

    6 default: 为该属性设置默认值

    我们来介绍几个重要的约束条件:

    (1)primary key也就是主键。主键就好比是每个人的身份证。能唯一标识一个记录。因此主键的值是唯一的,不能重复。另外主键也起到索引的作用,主键能帮助mysql以最快的速度查找到表中的某一条信息。

    我们可以设置单字段主键也可以设置多字段主键

    命令如下

    mysql> create table example1(id INT,name varchar(20),sex BOOLEAN,primary key(id,name));

    Query OK, 0 rows affected

    mysql> desc example1;

    +-------+-------------+------+-----+---------+-------+

    | Field | Type        | Null | Key | Default | Extra |

    +-------+-------------+------+-----+---------+-------+

    | id    | int(11)     | NO   | PRI | 0       |       |

    | name  | varchar(20) | NO   | PRI |         |       |

    | sex   | tinyint(1)  | YES  |     | NULL    |       |

    +-------+-------------+------+-----+---------+-------+

    3 rows in set

    (2)foreign key:外键。外键其实链接表于表之间关系。比如学校的学生信息数据库。假设这名学生有3名课程,语文,数学,英语。那么这些课程的成绩专门存储在成绩表中grade,另外还有一个表是存储这名学生的信息的student, student里面stu_id,且是主键,stu_id是grade的外键。如果stu_id=1的学生退学了,在student中会删除掉该学生的信息,那么同步grade表中stu_id=1的信息也必须同步删除。这就是外键的作用,外键能够将多个表信息的更新联动起来。

    创建一个表的外键如下:example1引用的是example的id

    mysql> create table example1(id INT primary key, grade INT,constraint con foreign key(id) references example(id));

    Query OK, 0 rows affected

    需要注意的是外键关联的必须是父表的主键。前面的例子中example 中的id必须为主键,否则在创建外键的时候为创建失败。

    表的修改:

    修改表名:

    mysql> alter table example rename grade_example;

    Query OK, 0 rows affected

    mysql> show tables;

    +----------------+

    | Tables_in_test |

    +----------------+

    | example1       |

    | grade_example  |

    +----------------+

    2 rows in set

    修改属性:

    mysql> desc grade_example;   #name为20字节的可变字符长度

    +-------+-------------+------+-----+---------+-------+

    | Field | Type        | Null | Key | Default | Extra |

    +-------+-------------+------+-----+---------+-------+

    | id    | int(11)     | NO   | PRI | NULL    |       |

    | name  | varchar(20) | YES  |     | NULL    |       |

    | sex   | tinyint(1)  | YES  |     | NULL    |       |

    +-------+-------------+------+-----+---------+-------+

    3 rows in set

    mysql> alter table grade_example modify name varchar(30);

    Query OK, 0 rows affected

    Records: 0  Duplicates: 0  Warnings: 0

    mysql> desc grade_example;    #修改后name为30字节的可变字符长度

    +-------+-------------+------+-----+---------+-------+

    | Field | Type        | Null | Key | Default | Extra |

    +-------+-------------+------+-----+---------+-------+

    | id    | int(11)     | NO   | PRI | NULL    |       |

    | name  | varchar(30) | YES  |     | NULL    |       |

    | sex   | tinyint(1)  | YES  |     | NULL    |       |

    +-------+-------------+------+-----+---------+-------+

    3 rows in set

    修改字段名以及属性类型:

    mysql> desc grade_example;   #sex为整型

    +-------+-------------+------+-----+---------+-------+

    | Field | Type        | Null | Key | Default | Extra |

    +-------+-------------+------+-----+---------+-------+

    | id    | int(11)     | NO   | PRI | NULL    |       |

    | name  | varchar(30) | YES  |     | NULL    |       |

    | sex   | tinyint(1)  | YES  |     | NULL    |       |

    +-------+-------------+------+-----+---------+-------+

    3 rows in set

    mysql> alter table grade_example change sex grade int;

    Query OK, 0 rows affected

    Records: 0  Duplicates: 0  Warnings: 0

    mysql> desc grade_example;   #修改后变成grade 也是整型

    +-------+-------------+------+-----+---------+-------+

    | Field | Type        | Null | Key | Default | Extra |

    +-------+-------------+------+-----+---------+-------+

    | id    | int(11)     | NO   | PRI | NULL    |       |

    | name  | varchar(30) | YES  |     | NULL    |       |

    | grade | int(11)     | YES  |     | NULL    |       |

    +-------+-------------+------+-----+---------+-------+

    3 rows in set

    增加字段:

    mysql> desc grade_example;

    +-------+-------------+------+-----+---------+-------+

    | Field | Type        | Null | Key | Default | Extra |

    +-------+-------------+------+-----+---------+-------+

    | id    | int(11)     | NO   | PRI | NULL    |       |

    | name  | varchar(30) | YES  |     | NULL    |       |

    | grade | int(11)     | YES  |     | NULL    |       |

    +-------+-------------+------+-----+---------+-------+

    3 rows in set

    mysql> alter table grade_example add class varchar(20) unique after grade;

    Query OK, 0 rows affected

    Records: 0  Duplicates: 0  Warnings: 0

    mysql> desc grade_example;    #在grade后面添加class属性。Class属性为可变字符串且是唯一的

    +-------+-------------+------+-----+---------+-------+

    | Field | Type        | Null | Key | Default | Extra |

    +-------+-------------+------+-----+---------+-------+

    | id    | int(11)     | NO   | PRI | NULL    |       |

    | name  | varchar(30) | YES  |     | NULL    |       |

    | grade | int(11)     | YES  |     | NULL    |       |

    | class | varchar(20) | YES  | UNI | NULL    |       |

    +-------+-------------+------+-----+---------+-------+

    4 rows in set

    删除字段:

    mysql> desc grade_example;

    +-------+-------------+------+-----+---------+-------+

    | Field | Type        | Null | Key | Default | Extra |

    +-------+-------------+------+-----+---------+-------+

    | id    | int(11)     | NO   | PRI | NULL    |       |

    | name  | varchar(30) | YES  |     | NULL    |       |

    | grade | int(11)     | YES  |     | NULL    |       |

    | class | varchar(20) | YES  | UNI | NULL    |       |

    +-------+-------------+------+-----+---------+-------+

    4 rows in set

    mysql> alter table grade_example drop class;

    Query OK, 0 rows affected

    Records: 0  Duplicates: 0  Warnings: 0

    mysql> desc grade_example;

    +-------+-------------+------+-----+---------+-------+

    | Field | Type        | Null | Key | Default | Extra |

    +-------+-------------+------+-----+---------+-------+

    | id    | int(11)     | NO   | PRI | NULL    |       |

    | name  | varchar(30) | YES  |     | NULL    |       |

    | grade | int(11)     | YES  |     | NULL    |       |

    +-------+-------------+------+-----+---------+-------+

    3 rows in set

    修改表的存储引擎:

    mysql> alter table grade_example engine=MyISAM;

    删除表: 这里看到删除失败,是因为grade_example表中有外键存在,首先要删除外键。首先example1有建立到grade_example的外键

    mysql> drop table grade_example;

    1217 - Cannot delete or update a parent row: a foreign key constraint fails

    mysql> alter table example1 drop

    foreign key con;

    Query OK, 0 rows affected

    Records: 0  Duplicates: 0  Warnings: 0

    mysql> drop table grade_example;

    Query OK, 0 rows affected

  • 相关阅读:
    Linux各主要发行版的包管理命令对照
    JDK 生成数字证书
    AbatorForEclipse插件使用总结
    [转载]在rhel 6 x86_64 上安装oracle 11g xe
    【转载】PL/SQL配置连接ORACLE
    Archlive新年第一棒: 基于2.6.37稳定内核的archlive20110107
    基于Arch的live系统
    【转】MyEclipse 9.0正式版官网下载(附Win+Llinux激活方法、汉化包)
    Exception in thread main java.lang.NoClassDefFoundError: org/apache/juli/logging/LogFacto
    MyEclipse 8.6插件下载
  • 原文地址:https://www.cnblogs.com/zhanghongfeng/p/7231085.html
Copyright © 2020-2023  润新知