zoukankan      html  css  js  c++  java
  • MySQL数据表的基本操作

    约束

    主键约束

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

    • 单字段主键

    在定义列的同时指定主键:字段名 数据类型 primary key
    在定义完所有列之后指定主键:constraint <约束名> primary key [字段名]

    • 多字段联合主键

    多字段联合主键语法如下:primary key [字段1,字段2,...字段n]

    例如:primary key(id,name)

    外键约束

      外键用来在两个表的数据之间建立链接,它可以是一列或者多列。一个表可以有一个或者多个外键。一个表的外键可以为空值,若不为空值,则每一个外键值必须等于另一个表中的主键的某个值。
      外键:首先它是表中的一个字段,它可以不是本表的主键,但对应另一个表的主键。外键的作用是保持数据的一致性、完整性。
      主表:对于两个具有关联的表而言,相关联字段中主键所在的那个表即是主表。
      从表:对于两个具有关联的表而言,相关联字段中外键所在的那个表即是从表。
    创建外键的语法规则如下:
    constraint <外键名> foreign key [字段1,字段2,....字段n] references <主表名> [主键列1,主键列2,...主键列n]
    例如:constraint test foreign key(name) references table_1(id);
    从表的外键必须关联主表的主键,且关联字段的数据类型必须一致

    非空约束

      非空约束指字段的值不能为空。对于使用了非空约束的字段,如果用户在添加数据时未指定值,数据库系统会报错。
    非空约束语法规则如下:
    字段名 数据类型 not null

    唯一约束

      唯一性约束,要求该列唯一,允许为空,但只能出现一个空值。唯一约束可以确保一列或者几列不出现重复的值。
    唯一性约束语法规则如下:

    • 定义完列之后直接指定唯一性约束

    字段名 数据类型 unique

    • 定义完所有列之后指定唯一性约束

    constraint <约束名> unique [字段名]
    例如:constraint test unique(id)

    uniqueprimary key的区别:一个表中可以有多个字段声明为unique,但只能有一个primary key声明;声明为primary key的列不允许有空值,但声明为unique的字段允许空值的存在。

    默认约束

      默认约束,指定某列的默认值。如男性员工比较多,性别就可以默认为“男”,如果插入一条新的记录时没有给这个字段赋值,那么系统就会自动为这个字段赋值为“男”。
    默认约束的语法规则如下:
    字段名 数据类型 default
    例如:sex varchar(25) default man ;

    设置表的属性值自动增加

      在数据库应用中,经常希望在每次插入新纪录时,系统自动生成字段的主键值。通过auto_increment,一个表只能有一个字段使用auto_increment约束,且该字段必须为主键的一部分。auto_increment约束的字段可以是任何整数类型。
    设置表的属性值自动增加的语法规则如下:
    字段名 数据类型 auto_increment

    数据表结构的操作

    查看

    查看表基本结构语句

      describe/desc语句可以查看表的字段信息,其中包括:字段名、字段数据类型、是否为主键,是否有默认值等。
    语法规则如下:
    describe 表名==desc 表名
    例:

    mysql> describe user;
    +------------------------+-----------------------------------+------+-----+-----------------------+-------+
    | Field                  | Type                              | Null | Key | Default               | Extra |
    +------------------------+-----------------------------------+------+-----+-----------------------+-------+
    | Host                   | char(60)                          | NO   | PRI |                       |       |
    | User                   | char(16)                          | NO   | PRI |                       |       |
    | Password               | char(41)                          | NO   |     |                       |       |
    | Select_priv            | enum('N','Y')                     | NO   |     | N                     |       |
    | Insert_priv            | enum('N','Y')                     | NO   |     | N                     |       |
    | Update_priv            | enum('N','Y')                     | NO   |     | N                     |       |
    | Delete_priv            | enum('N','Y')                     | NO   |     | N                     |       |
    | Create_priv            | enum('N','Y')                     | NO   |     | N                     |       |
    

    查看表的详细结构

      show create table语句可以用来显示创建表时的create table语句,语法格式如下:
    show create table 表名G;
    例:

    mysql> show create table userG;
    *************************** 1. row ***************************
           Table: user
    Create Table: CREATE TABLE `user` (
      `Host` char(60) COLLATE utf8_bin NOT NULL DEFAULT '',
      `User` char(16) COLLATE utf8_bin NOT NULL DEFAULT '',
      `Password` char(41) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL DEFAULT '',
      `Select_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
      `Insert_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
      `Update_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
      `Delete_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
      `Create_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
      `Drop_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
      `Reload_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
      `Shutdown_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
      `Process_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
      `File_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
      `Grant_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
      `References_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
      `Index_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
      `Alter_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
      `Show_db_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
      `Super_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
      `Create_tmp_table_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
    

    修改数据表

    修改表名

    语法规则如下:
    alter table 旧表名 rename 新表名
      修改表名不影响创建表时的数据结构。

    修改字段数据类型

    语法规则如下:
    alter table 表名 modify 字段名 [数据类型]
    例:
    alter table test modify name varchar(30);

    修改字段名

    语法规则如下:
    alter table 表名 change 旧字段名 新字段名 [新数据类型]
    例:
    alter table test change name user_name varchar(30);

    添加字段

    语法规则如下:
    alter table 表名 add 新字段名 [数据类型] [约束条件] [first|after 已存在字段名] ;
    例:
    alter table test add id int(11) first;

    在表的第一列添加一个id字段。

    alter table test add id int(11) after name;

    在表的name列下添加一个id字段。

    删除字段

    语法规则如下:
    alter table 表名 drop 字段名

    修改字段的排列位置

    语法规则如下:
    alter table 表名 modify 字段1 [数据类型] first|after 字段2;
    例:
    alter table test modify id varchar(12) first;

    将id字段调整到表中的第一列

    alter table test modify id varchar(12) after name

    将id字段调整到表中name字段后

    更改表的存储引擎

      可以使用show engines来查看MySQL支持的存储引擎。

    mysql> show engines;
    +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
    | Engine             | Support | Comment                                                        | Transactions | XA   | Savepoints |
    +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
    | FEDERATED          | NO      | Federated MySQL storage engine                                 | NULL         | NULL | NULL       |
    | MRG_MYISAM         | YES     | Collection of identical MyISAM tables                          | NO           | NO   | NO         |
    | MyISAM             | YES     | MyISAM storage engine                                          | NO           | NO   | NO         |
    | BLACKHOLE          | YES     | /dev/null storage engine (anything you write to it disappears) | NO           | NO   | NO         |
    | CSV                | YES     | CSV storage engine                                             | NO           | NO   | NO         |
    | MEMORY             | YES     | Hash based, stored in memory, useful for temporary tables      | NO           | NO   | NO         |
    | ARCHIVE            | YES     | Archive storage engine                                         | NO           | NO   | NO         |
    | InnoDB             | DEFAULT | Supports transactions, row-level locking, and foreign keys     | YES          | YES  | YES        |
    | PERFORMANCE_SCHEMA | YES     | Performance Schema                                             | NO           | NO   | NO         |
    +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
    9 rows in set (0.00 sec)
    

    更改表的存储引擎的语法格式如下:
    alter table 表名 engine=更改后的存储引擎名
    例:
    alter table test engine=MyISAM;

    删除表的外键约束

    语法规则如下:
    alter table 表名 drop foreign key 外键约束名

    删除数据表

    drop table [if exists] 表1,表2...,表n;
    参数if exists用于在删除前判断删除的表是否存在,加上改参数后,再删除表的时候,如果表不存在,SQL语句中可以顺利执行,但会发出警告。需要注意的是:当数据表中存在外键关联的情况下,直接删除主表会显示删除失败,需要先接触外键约束条件

  • 相关阅读:
    图片自动播放
    选项卡切换
    jquery实现全选、反选、不选
    JQuery $()后面的括号里的内容什么时候加引号,什么时候不加
    ajax跨域jsonp
    加班与效率
    提问的智慧
    程序员要勇于说不
    编程从业五年的十四条经验,句句朴实
    成为高效程序员的7个重要习惯
  • 原文地址:https://www.cnblogs.com/Cherry-Linux/p/8968209.html
Copyright © 2011-2022 走看看