mysql數據庫與表的創建

一、mysql數據庫的創建

1、創建數據庫

         創建數據庫語句:create database [IF NOT EXISTS] db_name [create_specification]

2、選項說明:

         IF NOT EXISTS:如果要創建的數據庫存在,創建時沒有加此語句會報錯。

         create_specification:指明創建數據庫的屬性

                   Character set屬性指明此數據庫的默認字符集

                   Collate屬性指明此數據庫的默認排序規則

3、創建數據庫

#創建名爲test的數據庫
mysql> create database test;
Query OK, 1 row affected (0.00 sec)
#再次創建時會報錯
mysql> create database test;
ERROR 1007 (HY000): Can't create database 'test'; database exists
#加” IF NOT EXISTS”後創建時不會報錯,會有告警
mysql> create database if not exists test;
Query OK, 1 row affected, 1 warning (0.00 sec)
#切換到剛創建的數據庫
mysql> use test;
Database changed

4、刪除數據庫

         命令:drop database database_name;

    Drop database語句用來刪除數據庫操作,既刪除了數據庫也刪除了庫裏的所有表,同時也會刪除該數據庫所在文件夾下的相關文件。

二、mysql數據庫中表的創建

         創建完數據庫後需要創建數據表,創建數據表的過程是規定數據列的屬性的過程,同時也是實時數據完整性約束的過程。在創建表示需要先進入到創建的數據庫中。

1、創建表的語法格式

(1)創建表語發一:

         CREATE TABLE <表名>

         (

           字段名1,數據類型 [列級別約束條件] [默認值],

           字段名2,數據類型 [列級別約束條件] [默認值],

          ……

           [表級別約束條件]

         );

(2)創建表的語法2:

         CREATE [TEMPORARY] TABLE [IF NOT EXISTS] <表名>

         (

           [(create_definition,……)]

           [table_options]

           [partition_options]

           [IGNORE | REPLACE]

           [AS] query_expression

         );

使用這種方法創建時各字段的說明如下:

         IF NOT EXISTS:當此表名存在時,不執行創建語句,同時也不報錯。

         TEMPORARY:表示創建的表爲臨時表,臨時表僅對本鏈接可見,另外的數據庫鏈接不可見,當本鏈接斷開時,臨時表也自動被drop掉

         IGNORE | REPLACE:Ignore和replace表示在插入數據的過程中如果新表中碰到違反唯一約束的情況下怎麼處理,ignore表示不插入,replace表示替換已有的數據,默認兩個關鍵詞都不寫則碰到違反的情況會報錯

(3)創建表的語法3(創建表的同時將現有的表結構複製過來):

         CREATE TABLE <表名>

         (

           LIKE 現有的表名

         );

2、創建表

(1)創建普通表

# 在test庫中創建一張學生表,有兩個字段,sid爲整數;sname爲字符串,長度爲12
mysql> create table student(sid int,sname varchar(12));
Query OK, 0 rows affected (0.65 sec)
# 查看剛創建的表結構
mysql> desc student;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| sid   | int(11)     | YES  |     | NULL    |       |
| sname | varchar(12) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set (3.11 sec)
#創建表時也可在不進入庫時創建
mysql> create table test.student1(id int,name varchar(12));   
Query OK, 0 rows affected (0.14 sec)

(2)創建臨時表

# 在test庫下創建臨時表test123
mysql> create temporary table test.test1234(name varchar(12),age int(3));
Query OK, 0 rows affected (0.05 sec)

         臨時表只對當前的連接有效,當斷開當前連接時,臨時表會被drop掉,再次連接mysql時找不到臨時表。

(3)依據已有的表的結構創建表

# 將mysql庫中的user表結構複製到新建的testuser_copy表中
mysql> create table testuser_copy like mysql.user;    
Query OK, 0 rows affected (0.03 sec)
# 在創建表testuser2_copy時將查詢結果插入表中
mysql> create table testuser_copy2 as select user,host from mysql.user;     
Query OK, 8 rows affected (0.22 sec)
Records: 8  Duplicates: 0  Warnings: 0
# 查詢表testcopy2_user表中的數據
mysql> select * from testuser_copy2;
+---------------+---------------+
| user          | host          |
+---------------+---------------+
| root          | 192.168.%.%   |
| liuyi         | 192.168.1.100 |
……

(4)創建表時設置屬性

         Data_type:設置字段的類型,如整型(int),字符創(varchar)

         Not null/null:設置字段能否爲空

         Default:設置字段的默認值

         auto_increment:表示字段爲整數或者浮點數類型的value+1遞增數值,value爲當前表中該字段最大的值,默認是從1開始遞增;一個表中只容許有一個自增字段,且該字段必須有key屬性,不能含有default屬性,且插入負值會被當成很大的正數

# 創建表student3,id不能爲空
mysql> create table student3(id int not null,name varchar(10));  
Query OK, 0 rows affected (0.43 sec)
# 創建表student4,age默認值爲25
mysql> create table student4(id int not null,name varchar(12),age int default 25);
Query OK, 0 rows affected (1.65 sec)
# 創建帶有auto_increment字段的表
mysql> create table student5(id int key auto_increment,name varchar(12)); 
Query OK, 0 rows affected (0.06 sec)
# 給表student5的name字段插入一條數據 
mysql> insert into student5(name) values('dayi');
Query OK, 1 row affected (0.00 sec)
# id字段會自動插入
mysql> select * from student5;
+----+------+
| id | name |
+----+------+
|  1 | dayi |
+----+------+
1 row in set (0.00 sec)

(5)創建約束的數據表

         Primary key:表示該字段爲主鍵,主鍵字段必須唯一,必須非空,一個表中只能有一個主鍵,主鍵可以包含一個或多個字段

# 創建主鍵約束的數據表(也可使用create table teacher(id int,name varchar(12),primary key(id));格式創建)
mysql> create table teacher(id int primary key,name varchar(12));
Query OK, 0 rows affected (0.08 sec)
# 創建多個鍵聯合主鍵約束表
mysql> create table teacher3(id int,name varchar(12),deptid int,primary key(id,deptid));
Query OK, 0 rows affected (0.01 sec)

         外鍵用來在兩個表的數據之間建立連接,外鍵可以是一列或者多列,一個表可以有一個或者多個外鍵,一個表的外鍵可以爲空值,若不爲空值,則每一個外鍵的值必須等於另一個表中主鍵的某個值;定義外鍵後,不允許刪除在另一個表中具有關聯關係的行。

         Key/index:表示索引字段

         Unique:要求該列唯一,允許爲空,但只能出現一個空值,唯一約束可以確保一列或者幾列不出現重複值。

         Foreign key:表示該字段爲外鍵字段

         Constraint:表示爲主鍵、唯一鍵、外鍵等約束條件命名,如果沒有命名則MySQL會默認給一個

         Column_format:目前僅在ndb存儲引擎的表上有用,表示該字段的存儲類型是fixed, dynamic或者是default

         Storage:目前也僅在ndb存儲引擎的表上有用

# 先創建一個有主鍵約束的表gender
mysql> create table  gender(gender_id int(11) not null,name varchar(12) default null, primary key(gender_id));
Query OK, 0 rows affected (0.01 sec)
# 創建表student6,讓它的外鍵作爲關聯到表gender的gender_id
mysql> create table student6(id int primary key auto_increment,name varchar(12) unique,gender int,constraint gend_id foreign key(gender) references gender(gender_id)); 
Query OK, 0 rows affected (0.06 sec)

(6)查看創建的表

         查看錶結構:desc tablename

         查看錶結構詳細語句:show create table tablename

# 查看錶student6結構
mysql> desc student6;
+--------+-------------+------+-----+---------+----------------+
| Field  | Type        | Null | Key | Default | Extra          |
+--------+-------------+------+-----+---------+----------------+
| id     | int(11)     | NO   | PRI | NULL    | auto_increment |
| name   | varchar(12) | YES  | UNI | NULL    |                |
| gender | int(11)     | YES  | MUL | NULL    |                |
+--------+-------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)
# 查看創建表student6的詳細結構語句
mysql> show create table student6;
+----------+--------------------------------------------------------------------
| Table    | Create Table
+----------+---------------------------------------------------------------------------
| student6 | CREATE TABLE `student6` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(12) DEFAULT NULL,
  `gender` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `name` (`name`),
  KEY `gend_id` (`gender`),
  CONSTRAINT `gend_id` FOREIGN KEY (`gender`) REFERENCES `gender` (`gender_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
+----------+----------------------------------------------------------------------------------
1 row in set (0.00 sec)

(7)創建表綜合操作

         創建一個名爲course的數據庫

         在庫中創建students表,包含的字段有sid(整型自增主鍵),sname(64字節字符串),gender(12位字符串),dept_id(整型並外鍵到dept表的id字段)。

         在庫中創建dept表,包含的字段有id(整型自增主鍵),dept_name(64位字符串)

         在庫中創建course表,包含的字段有id(整型自增主鍵),course_name(64位字符串),teacher_id(整型並外鍵到teacher表的id字段)

         在庫中創建teacher表,包含的主要字段爲id(整型自增字段主鍵),name(字符串64位),dept_id(整型並外鍵到dept表的id字段)

# 創建並進入到庫course
mysql> create database course;
mysql> use course;
#先創建dept表
mysql> create table dept(id int primary key auto_increment,dept_name varchar(64));
#創建student表
mysql> create table student(sid int primary key auto_increment,sname varchar(64),gender varchar(12),dept_id int not null,constraint deptid foreign key(dept_id) references dept(id));
# 創建teacher表
mysql> create table teacher(id int primary key auto_increment,name varchar(64),dept_id int not null,constraint dept_id foreign key(dept_id) references dept(id));
# 創建course表
mysql> create table course(id int primary key auto_increment,course_name varchar(64),teacher_id int,constraint teacher_id foreign key(teacher_id) references teacher(id));

(8)重命名錶

表創建完成後,如果創建錯了可以重命名錶,Rename table能將表中的數據,索引,主鍵定義都自動轉換到新表下,但視圖和對原表分配的權限不能自動轉換到新表,需要手動執行。

# 對錶重命名
mysql> rename table student_backup to student02;
Query OK, 0 rows affected (0.01 sec)

(9)刪除表

         命令:drop table [IF EXISTS] 表1,表2……;

         在刪除表時可以同時刪除多個表,如果刪除被外鍵關聯的父表時會報錯;要刪除被關聯的父表時應該先刪除與父表關聯的字表,在刪除父表。

# 刪除表student
mysql> drop table student;
Query OK, 0 rows affected (0.12 sec)

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章