MySQL表的创建与维护

一、导入测试数据

[[email protected] ~]# wget https://launchpadlibrarian.net/24493586/employees_db-full-1.0.6.tar.bz2

mysql> source /root/employees_db/employees.sql ;

查看:

mysql> use employees;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> show tables;
+---------------------+
| Tables_in_employees |
+---------------------+
| departments |
| dept_emp |
| dept_manager |
| employees |
| salaries |
| titles |
+---------------------+
6 rows in set (0.00 sec)

二、数据表

表是关系型数据库的核心,表是记录的集合(集合中的数据是无序的)

二维表模型易于人类理解,mysql默认存储引擎都是基于行存储

每行记录都是基于列进行组织的

语法:

官网:https://dev.mysql.com/doc/refman/5.7/en/create-table.html

CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name

(create_definition,...)

[table_options]

[partition_options]

create_definition:

  col_name column_definition

column_definition:
 data_type [NOT NULL | NULL] [DEFAULT default_value]
  [AUTO_INCREMENT] [UNIQUE [KEY]] [[PRIMARY] KEY]
  [COMMENT ‘string‘]
  [COLUMN_FORMAT {FIXED|DYNAMIC|DEFAULT}]
  [STORAGE {DISK|MEMORY|DEFAULT}]
  [reference_definition]
 | data_type [GENERATED ALWAYS] AS (expression)
  [VIRTUAL | STORED] [NOT NULL | NULL]
  [UNIQUE [KEY]] [[PRIMARY] KEY]
  [COMMENT ‘string‘]

知识点1:创建临时表(temporary)

To create a temporary table, you must have the CREATE TEMPORARY TABLES privilege

mysql> create table a ( id int);
Query OK, 0 rows affected (0.20 sec)

mysql> insert into a select 5;
Query OK, 1 row affected (0.02 sec)
Records: 1 Duplicates: 0 Warnings: 0

mysql> create temporary table a ( id int);
Query OK, 0 rows affected (0.00 sec)

mysql> show tables;
+------------------+
| Tables_in_testDB |
+------------------+
| a |
+------------------+
1 row in set (0.00 sec)

mysql> select * from a;
Empty set (0.00 sec)

mysql> insert into a select 6;
Query OK, 1 row affected (0.00 sec)
Records: 1 Duplicates: 0 Warnings: 0

mysql> select * from a;
+------+
| id |
+------+
| 6 |
+------+
1 row in set (0.00 sec)

(综上,临时表的表明可以和实际存在的表名同名,但是建议不这样操作)

mysql> system ls /tmp -lh

-rw-r-----. 1 mysql mysql 8.4K Nov 28 16:38 #sql5ad7_f_0.frm
-rw-r-----. 1 mysql mysql 8.4K Nov 28 16:58 #sql5ad7_f_1.frm

数据存放到ibtmp1临时表空间

[[email protected] mysql_data1]# ll ibtmp1
-rw-r-----. 1 mysql mysql 12582912 Nov 28 17:05 ibtmp1

案例2:

mysql> create table orders ( o_orderkey int(11) not null,o_custkey int(11) default null,o_orderstatus char(1) default null,o_totalprice double default null,o_orderDATE date default null, o_clerk char(15) default null, o_orderpriority char(15) default null, o_comment varchar(79) default null,primary key (o_orderkey),key `i_o_custkey`(`o_custkey`));
Query OK, 0 rows affected (0.23 sec)

mysql> show create table orders\G
*************************** 1. row ***************************
Table: orders
Create Table: CREATE TABLE `orders` (
`o_orderkey` int(11) NOT NULL,
`o_custkey` int(11) DEFAULT NULL,
`o_orderstatus` char(1) DEFAULT NULL,
`o_totalprice` double DEFAULT NULL,
`o_orderDATE` date DEFAULT NULL,
`o_clerk` char(15) DEFAULT NULL,
`o_orderpriority` char(15) DEFAULT NULL,
`o_comment` varchar(79) DEFAULT NULL,
PRIMARY KEY (`o_orderkey`),
KEY `i_o_custkey` (`o_custkey`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

mysql> show table status like ‘orders‘\G 查看表的状态
*************************** 1. row ***************************
Name: orders
Engine: InnoDB
Version: 10
Row_format: Dynamic
Rows: 0
Avg_row_length: 0
Data_length: 16384
Max_data_length: 0
Index_length: 16384
Data_free: 0
Auto_increment: NULL
Create_time: 2017-11-28 17:24:22
Update_time: NULL
Check_time: NULL
Collation: utf8_general_ci
Checksum: NULL
Create_options:
Comment:
1 row in set (0.00 sec)

二、外键约束

[CONSTRAINT [symbol]] FOREIGN KEY [index_name] (index_col_name,...) reference_definition | CHECK (expr)

reference_definition:
  REFERENCES tbl_name (index_col_name,...)
  [MATCH FULL | MATCH PARTIAL | MATCH SIMPLE]
  [ON DELETE reference_option]
  [ON UPDATE reference_option]

reference_option:

  RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT

案例1:

mysql> create table parent ( id int(11) not null,primary key(id))engine=innodb default charset=latin1;
Query OK, 0 rows affected (0.12 sec)

mysql> create table child( id int(11) default null, parent_id int(11) default null,key `par_id`(`parent_id`),constraint `child_ibfk_1` foreign key (`parent_id`) references parent (id) on delete cascade on update cascade);
Query OK, 0 rows affected (0.13 sec)

mysql> insert into parent values(1);
Query OK, 1 row affected (0.02 sec)

mysql> insert into child values (1,1);
Query OK, 1 row affected (0.05 sec)

mysql> update parent set id=2 where id=1;
Query OK, 1 row affected (0.03 sec)
Rows matched: 1 Changed: 1 Warnings: 0

mysql> select * from child;
+------+-----------+
| id | parent_id |
+------+-----------+
| 1 | 2 |
+------+-----------+
1 row in set (0.00 sec)

(级别更新,on delete cascade on update cascade 只要父表发生变化,所引用的子表也会发生更新)

时间: 2024-08-01 09:31:44

MySQL表的创建与维护的相关文章

MySQL表的创建和表中数据操作

这篇文章主要介绍在navicat的命令界面操作mysql.主要涉及建立表结构,和对表中数据的增加删除修改查询等动作.站在一个新手角度的简单mysql表结构和数据操作. ☆ 准备工作 1,保证自己的电脑安装了mysql(my.ini下的字符集设置是utf8) 2,确保电脑同时安装navicat(任意版本) 3,保证mysql服务器已经启动 注:若对navicat操作不熟,请参照<<navicat从下载到使用>>这篇文章. ☆ 打开控制台 在navicat的tools(工具)菜单栏选择

mysql表的创建、查看、修改、删除

一.创建表 创建表前先使用use 数据库名进入某一个数据库,创建表语句的格式如下: create table 表名称 ( 列名1 列的数据类型 [约束], 列名2 列的数据类型 [约束], 列名2 列的数据类型 [约束], ... 列名N 列的数据类型 [约束] ); #注意:最后一个末尾没有逗号 比如创建一个表名称为students,有name和age两列的表的命令为: create table students ( name varchar(20), age INTEGER ); 创建完之后

mysql表的创建

在创建数据库表时,最好是在编辑器中写好创建表的代码,然后粘贴到命令行中,这样如果有错修改起来方便. 现在来创建一个user表: -- 打开数据库, --后面必须要有空格, 表示注释 USE mydb3; -- 创建表(user) -- 编号:id -- 用户名:username -- 年龄:age -- 性别: sex -- 邮箱:email -- 地址:addr -- 生日:birth -- 薪水:salary -- 电话:tel -- 是否结婚:married -- 当有中文的时候需要临时

MySQL 表的创建、修改、删除

1.创建表 1 create table 表名 ( 2 列名 类型 是否可以为空 3 列名 类型 是否可以为空 4 ) engine=innodb default charset=utf8; 1 是否可以为控制.null 表示可以为空值.not null 表示不可以为空值 2 not null -不可以为空值 3 null - 可以为空值 是否可以为空值 1 自增,如果为某列设置自增列,插入数据时无需设置此列,默认将自增.(表中只能有一个自增列) 2 create table class( 3

1.sql语句&amp;mysql表单

一.数据库和数据库管理系统的关系 1.数据库(DataBase):存储数据的仓库,本质上是一个文件系统 2.数据库管理系统(DBMS):DBMS是一个软件,用来管理文件(DB) 二.表的介绍 1.表中的一行:一条记录 2.表中的一列:一个字段 三.表数据和Java类的关系 一张表---Java中的一个类 一个字段---类中的一个属性 一条记录---类的一个对象 四.几个常见的数据库管理系统 MySQL:开源免费的数据库,小型的数据库,已经被ORACLE收购了,MySQL6.x版本也开始收费. O

使用hibernate自动创建Mysql表失败原因

1.使用 schemaExport(hibernate5.2.3)创建Mysql表 @Test public void testSchemaExport() { ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().configure().build(); Metadata metadata = new MetadataSources(serviceRegistry).buildMetadata(); Sch

快速创建和mysql表对应的java domain实体类

今天创建了一个表有十几个字段,创建完之后必然要写一个与之对应的java domain实体类.这不是重复的工作吗?为什么不先把这个表的所有的字段查出来,然后放到linux环境下,用sed工具在每一行的前面加上"private String ",每一行的后面添加";".这样可以节省很多重复工作.下面上sql代码和sed命令. 查询一个mysql表所有列的列名的sql代码如下: SELECT COLUMN_NAME FROM information_schema.COLU

mysql学习从0开始:表的创建

下面的例子是一个名为 "persons" 的表: Id LastName FirstName Address City 1 Adams John Oxford Street London 2 Bush George Fifth Avenue New York 3 Carter Thomas Changan Street Beijing 上面的表包含三条记录(每一条对应一个人)和五个列(Id.姓.名.地址和城市). 现在我们来创建上面的数据表: mysql> create tabl

MYSQL千万级数据表,创建表及字段扩展的几条建议

MYSQL千万级数据表,创建表及字段扩展的几条建议 一:概述 当我们设计一个系统时,需要考虑到系统的运行一段时间后,表里数据量大约有多少,如果在初期,就能估算到某几张表数据量非常庞大时(比如聊天消息表),就要把表创建好,这篇文章从创建表,增加数据,以及字段扩展,这几个方面来给出建议. 二:创建表 假如现在我们需要创建IM项目中的聊天消息表,这个表数据量大,读操作远超过写操作,我们都知道,mysql常用的数据库引擎主要有innodb,myisam,这两个数据库引擎主要区别是,innodb支持事务,