![](https://img2023.cnblogs.com/blog/3076680/202308/3076680-20230821150719320-729006736.png) # 1. 創建數據表 ## 1.1. sql ```sql CREATE TABLE person (person ...
1. 創建數據表
1.1. sql
CREATE TABLE person
(person_id SMALLINT UNSIGNED,
fname VARCHAR(20),
lname VARCHAR(20),
eye_color CHAR(2),
birth_date DATE,
street VARCHAR(30),
city VARCHAR(20),
state VARCHAR(20),
country VARCHAR(20),
postal_code VARCHAR(20),
CONSTRAINT pk_person PRIMARY KEY (person_id)
);
1.2. eye_color CHAR(2) CHECK (eye_color IN ('BR','BL','GR')),
1.2.1. MySQL允許在定義列時關聯檢查約束
1.3. eye_color ENUM('BR','BL','GR'),
1.3.1. MySQL提供了另一種名為enum的字元數據類型,將檢查約束併入了數據類型定義
1.4. sql
CREATE TABLE person
(person_id SMALLINT UNSIGNED,
fname VARCHAR(20),
lname VARCHAR(20),
eye_color ENUM('BR','BL','GR'),
birth_date DATE,
street VARCHAR(30),
city VARCHAR(20),
state VARCHAR(20),
country VARCHAR(20),
postal_code VARCHAR(20),
CONSTRAINT pk_person PRIMARY KEY (person_id)
);
1.5. 查看數據表定義
1.5.1. mysql> desc person;
2. 什麼是null?
2.1. 不適用
2.2. 未知
2.3. 空集
3. 數值型主鍵數據
3.1. 找到當前數據表中的最大值,然後加1
3.2. 由資料庫伺服器提供
3.2.1. 所有的資料庫伺服器都提供了一種安全穩健的方法來生成數值型主鍵
3.2.2. Oracle Database,使用稱為序列(sequence)的獨立模式對象(schema object)
3.2.3. MySQL中,只需簡單地為主鍵列啟用自增(auto-increment)特性
3.2.3.1. ALTER TABLE person MODIFY person_id SMALLINT UNSIGNED AUTO_INCREMENT;
4. XML格式的數據
4.1. 對於MySQL,可以在調用mysql工具時使用--xml選項,所有查詢的輸出都會自動轉換成XML格式
4.1.1. sql
C:\database> mysql -u lrngsql -p --xml bank
Enter password: xxxxxx
Welcome to the MySQL Monitor...
Mysql> SELECT * FROM favorite_food;
<?xml version="1.0"?>
<resultset statement="select * from favorite_food"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<row>
<field name="person_id">1</field>
<field name="food">cookies</field>
</row>
<row>
<field name="person_id">1</field>
<field name="food">nachos</field>
</row>
<row>
<field name="person_id">1</field>
<field name="food">pizza</field>
</row>
</resultset>
3 rows in set (0.00 sec)
4.2. 對於SQL Server
4.2.1. SELECT * FROM favorite_food FOR XML AUTO, ELEMENTS
5. 常見錯誤及響應
5.1. 非唯一的主鍵
5.1.1. ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'
5.1.2. 由於數據表定義中包含主鍵約束,因此MySQL會確保重覆的主鍵值不會被插入數據表中
5.2. 不存在的外鍵
5.2.1. ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraintfails ('sakila'.'favorite_food', CONSTRAINT 'fk_fav_food_person_id' FOREIGNKEY('person_id') REFERENCES 'person' ('person_id'))
5.2.2. 僅當使用InnoDB存儲引擎創建數據表時,外鍵約束才是強制的
5.3. 列值違規
5.3.1. ERROR 1265 (01000): Data truncated for column 'eye_color' at row 1
5.3.2. 伺服器對所提供的eye_color列的值不滿意
5.4. 無效的日期轉換
5.4.1. ERROR 1292 (22007): Incorrect date value: 'DEC-21-1980' for column 'birth_date' at row 1
5.4.2. 最好是明確指定格式化字元串,而不是依賴預設格式
5.4.3. str_to_date函數指定了格式化字元串
5.4.3.1. sql
mysql> UPDATE person
-> SET birth_date = str_to_date('DEC-21-1980' , '%b-%d-%Y')
-> WHERE person_id = 1;
Query OK, 1 row affected (0.12 sec)
Rows matched: 1 Changed: 1 Warnings: 0