SQL語句-create語句


SQL語法基礎

Create database語句

  • Create database語句是在MySQL實例上創建一個指定名稱的數據 庫,create schema語句的語義和create database是一樣的
  • 當創建的數據庫本身存在而且沒有寫明if not exists子句時,則創 建數據庫的語句會報錯

Create database語句

  • create_specification子句指明創建的數據庫的屬性,並存儲在db.opt文 件中
  • Character set屬性指明此數據庫的默認字符集
  • Collate屬性指明此數據庫的默認排序規則
  • 創建后的數據庫在數據文件所在目錄會創建一個自己的文件目錄,用 來包含后續創建的表文件
  • 也可以直接通過mkdir在數據目錄創建目錄, 則MySQL會識別為一個數據庫,並在執行show databases命令時可以看 到
mysql> create database test3; 		-- 創建數據庫成功 
Query OK, 1 row affected (0.00 sec)
mysql> create database test3; 		-- 再次創建數據庫失敗
ERROR 1007 (HY000): Can't create database 'test3'; database exists
mysql> create database if not exists test3; 		-- 語句執行成功 
Query OK, 1 row affected, 1 warning (0.00 sec)
mysql> use test3; 		-- 切換到test3數據庫

create table語句

  • tbl_name表示被創建的表名,默認在當前數據庫下創建此表,當 然也可以指定在某個數據庫下創建表
  • if not exists表示當相同的表名存在時,則不執行此創建語句,避 免語句執行錯誤
create table students2(sid int,sname varchar(10));
create table test3.students2(sid int,sname varchar(10)); 		--在test3這個數據庫下創建students2表
create table if not exists students2(sid int,sname varchar(10));

Temporary關鍵詞

  • 表示創建的是臨時表,臨時表僅對本鏈接可見,另外的數據庫鏈接不可見, 當本鏈接斷開時,臨時表也自動被drop掉
mysql> create temporary table temp1(sid int,sname varchar(10)); 
Query OK, 0 rows affected (0.00 sec)
mysql> insert into temp1 values(1,'a'); 
Query OK, 1 row affected (0.00 sec)
mysql> select * from temp1;
+------+-------+
|sid |sname|
+------+-------+
| 1 |a |
+------+-------+
1 row in set (0.00 sec)
  • 另一個數據庫鏈接執行相同的查詢語句查不到數據
mysql> select * from temp1;
ERROR 1146 (42S02): Table 'test.temp1' doesn't exist		-- 本數據庫鏈接斷開后再鏈接,臨時表也不存在
mysql> select * from temp1;
ERROR 1146 (42S02): Table 'test.temp1' doesn't exist

Like關鍵詞

  • 表示基於另外一個表的定義復制一個新的空表,空表上的字段屬性和索 引都和原表相同
 mysql>create table students_copy like students;
 Query OK, 0 rows affected (0.01 sec)
 mysql> show create table students_copy;
CREATE TABLE `students_copy` (
 `sid` int(11) DEFAULT NULL,
 `sname` varchar(20) DEFAULT NULL,
`sex` int(11) DEFAULT NULL,
 UNIQUE KEY `idx_st_sid` (`sid`),
KEY `idx_st_union` (`sname`,`sex`)
 )ENGINE=InnoDB DEFAULT CHAR SET=latin1

Create table ... as select語句

  • 表示創建表的同時將select的查詢結果數據 插入到表中,但索引和主外鍵信息都不會同步過來
mysql> create table students_copy2 as select * from students;
Query OK, 0 rows affected (0.03 sec)
Records: 0 Duplicates: 0 Warnings: 0

mysql> desc students_copy2;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| sid     | int(11)         | YES | | NULL | |
| sname | varchar(20) | YES | | NULL
| sex     | int(11)         | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+

Ignore和replace

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

Data_type

  • 表示定義的字段類型

Not null/null

  • 表示字段是否允許為空,默認為null表示允許為空,
  • not null表示需要對此字段明確數值,或者要有默認值,否則報錯
 mysql> create table students2(sid int not null,sname varchar(10)); 
 Query OK, 0 rows affected (0.00 sec)
mysql> insert into students2(sname) values('eee');
ERROR 1364 (HY000): Field 'sid' doesn't have a default value

Default表示設置字段的默認值

create table students3(sid int,sname varchar(10),gender int default 0); 
insert into students3 values(1,'a',default);
insert into students3(sid,sname) values(2,'b');
mysql> select * from students3;
+------+-------+--------+
|sid         |sname    |gender        | 
+------+-------+--------+ 
|1|a|0| 
|2|b|0|

Auto_increment

  • 表示字段為整數或者浮點數類型的value+1遞增數值,value為當前表 中該字段最大的值,默認是從1開始遞增
  • 一個表中只容許有一個自增字段,且該字段必須有key屬性,不能含有default屬性,且插入負值會被當成很大的正數
mysql>create table students4(sid int auto_increment,sname varchar(10));
ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and it must be defined as a
key
mysql>create table students4(sid int primary key auto_increment,sname varchar(10));
Query OK, 0 rows affected (0.01 sec)
mysql> insert into students4(sname) values('a');
Query OK, 1 row affected (0.00 sec)
mysql> insert into students4(sid,sname) values(3,'b');
Query OK, 1 row affected (0.01 sec)
mysql> insert into students4(sname) values('c');
Query OK, 1 row affected (0.00 sec) 
mysql> select * from students4;
+-----+-------+
|sid        |sname    | 
 +-----+-------+ 
|1|a| 
|3|b| 
|4|c|

Constraint

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

Primary key

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

Key/index

  • 表示索引字段

Unique

  • 表示該字段為唯一屬性字段,且允許包含多個null值

Foreign key

  • 表示該字段為外鍵字段
CREATE TABLE `gender` (
gender_id int(11) NOT NULL,
name varchar(10) DEFAULT NULL,
PRIMARY KEY (gender_id) 
);
create table students5(sid int not null primary key auto_increment,sname varchar(10) unique,gender int,constraint for_1 foreign key (gender) references gender(gender_id));

設計選課數據庫系統

  • 創建一個名為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字段
  • Students表和teacher表的dept_id為非空
mysql> create database course;
mysql> use course;

mysql> create table dept(id int auto_increment primary key,dept_name varchar(64));

mysql> create table students(sid int auto_increment primary key,sname varchar(54),gender varchar(12),dept_id int not null,constraint for_1 foreign key(dept_id) references dept(id));

mysql> create table teacher(id int auto_increment primary key,name varchar(64),dept_id int not null, constraint for_2 foreign key(dept_id) references dept(id)); 

mysql> create table course(id int auto_increment primary key,course_name varchar(64),teacher_id int,constraint for_3 foreign key(teacher_id) references teacher(id));


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM