天天看點

mysql初步認知

MySQL是一種關系資料庫管理系統,關系資料庫将資料儲存在不同的表中,而不是将所有資料放在一個大倉庫内,這樣就增加了速度并提高了靈活性。

MySQL所使用的 SQL 語言是用于通路資料庫的最常用标準化語言。MySQL 軟體采用了雙授權政策,分為社群版和商業版,由于其體積小、速度快、總體擁有成本低,尤其是開放源碼這一特點,一般中小型網站的開發都選擇 MySQL 作為網站資料庫。

--  單行注釋
/* 多行注釋 */
           

第一個字元必須是下列字元之一:

  • Unicode 标準 3.0 所定義的字母(Unicode 中定義的字母包括拉丁字母 a-z 和 A-Z,以及來自其它語言的字母字元)。
  • 下劃線 (_)、at 符号 (@) 或者數字元号 (#)

後續字元可以是:

  • Unicode 标準 3.0 所定義的字母。
  • 來自基本拉丁字母或其它國家/地區腳本的十進制數字。
  • at符号(@)、美元符号 ($)、數字元号或下劃線。
  • 辨別符不能是所用RDBMS的保留字。
  • 不允許嵌入空格或其它特殊字元。

1. 建立一個資料庫:

CREATE DATABASE it1997;
           
重名錯誤:Can’t create database ‘it1997’; database exists

使用資料庫,選擇你要操作的資料庫

USE it1997;
           

删除資料庫;

drop database it1997;

建立表:

create table 表名 (
 列名1 資料類型 限制,
 列名2 資料類型 限制,
 列名3 資料類型 限制  --  最後一個列的後面,不要加逗号。
)
           

CREATE TABLE USER(

u_name CHAR,

u_age INT

);

删除表的結構和所有資料

DROP TABLE USER;

1. 整數:

INT -21億 - +21億

TINYINT 0-255

2. 浮點數:

float

double

decimal(m,d)

m必須大于d, 小數點和(負數)的‘-’符号不包括在M中。

3. 字元串類型:

char(n) n的可用範圍0-255, 無論存儲資料長、短,都是按N的大小來存儲。固定長度 varchar( n) n的範圍

65535 按實際的字元串長度來存儲 + 1,不是固定長度。

text 存儲大的字元串

BINARY 存儲二進制字元串

4. 日期時間類型

date : yyyy-mm-dd
 
 datetime: yyyy-mm-dd hh:mm:ss
 
 TIMESTAMP: 時間戳
           

為什麼要保證資料的完整性?

為了防止垃圾資料的産生,進而影響資料庫的執行效率!!!

如何保證資料的完整性呢?

可靠性 + 準确性 = 完整性

解決方案:

資料完整性的分類

1.實體完整性

保證一行資料是有效的

2.域完整性

保證一列資料是有效的

3.引用完整性

保證引用的編号是有效的

4.使用者自定義完整性

保證自定義規則

CREATE TABLE t_user(
 u_id INT AUTO_INCREMENT PRIMARY KEY, 
			               --  添加主鍵限制, 一般來講id,都是自動增長的值;
			               -- 一定是整數類型,從1開始。
			               -- PRIMARY KEY:主鍵具有 唯一, 非空的特殊。
 u_number CHAR(10) UNIQUE,                           -- 學号必須唯一。
						   -- UNIQUE:隻有唯一性, 允許為空。
 u_name CHAR(50),
 u_age TINYINT -- 0~255
)AUTO_INCREMENT = 10000;
           

觸發唯一限制時的錯誤提示:

Duplicate entry ‘xh001’ for key ‘u_number’ 重複值的輸入

觸發主鍵限制時的錯誤提示:

Duplicate entry ‘1’ for key ‘PRIMARY’

為什麼要域完整性

保證指定列的資料的有效性

什麼叫域完整性?

域完整性是指定列的輸入有效性

實作方法

非空限制:Not Null

預設限制:Default

學生表

CREATE TABLE t_user(
 u_id INT AUTO_INCREMENT PRIMARY KEY, 
 u_number CHAR(10) UNIQUE NOT NULL,          -- 學号
                                             --  NOT NULL ,不允許為空;
 u_name CHAR(50),
 u_age TINYINT,
 u_sex CHAR(1) DEFAULT "男"
)DEFAULT CHARSET = utf8 AUTO_INCREMENT = 10000;
                                             -- DEFAULT CHARSET=utf8 設定字元編碼
           

成績表

CREATE TABLE t_score(
  s_id INT AUTO_INCREMENT PRIMARY KEY,
  s_u_number CHAR(10), 					     -- 學生的學号,設計為外鍵, 需要和學生表的學号關鍵
  s_yw DECIMAL(5,2) NOT NULL,                -- 國文成績
  s_sx DECIMAL(5,2) NOT NULL,                -- 數學成績
										     -- 添加外鍵限制 FOREIGN KEY
										     --  CONSTRAINT(限制) FOREIGN KEY(外鍵列名) REFERENCES(參照) 主表名(主鍵名)
  CONSTRAINT FOREIGN KEY(s_u_number) REFERENCES t_user(u_number)
)DEFAULT CHARSET = utf8;
           

添加外鍵限制失敗:

Cannot add foreign key constraint

原因:

  1. 從表的外鍵的資料類型與主表主鍵不一緻
  2. 寫錯了外鍵名,主表名,主鍵名中任何一個。

觸發外鍵限制時,的錯誤提示資訊

Cannot add or update a child row: a foreign key constraint fails

(外鍵限制失敗) (

it1997

.

t_score

, CONSTRAINT

t_score_ibfk_1

FOREIGN KEY (

s_u_number

) REFERENCES

t_user

(

u_number

))
  1. 從表添加資料時,不能添加主表沒有的資料;
  2. 從表修改資料時,不能設定主表沒有的資料;
  3. 主表要删除,修改主鍵的資料時,不能删除、修改從表中使用了的資料行。

DML 修改資料

1. 删除表

DROP TABLE t_user;

Cannot drop table ‘t_user’

referenced by a

foreign key constraint ‘t_score_ibfk_1’ on table ‘t_score’.

  • 通過外鍵限制連接配接在一起的表不能被删除。
  • 在删除表之前,必須先删除限制。 或 先删除從表

2. 複制表

CREATE TABLE user_bk SELECT * FROM t_user;
CREATE TABLE score_bk SELECT * FROM t_score;
        -- 複制表,不能複制表的限制。 隻能複制表結構和資料
           

隻複制表結構,不要資料

CREATE TABLE user_bk_str SELECT * FROM t_user WHERE 1=0;
           

3. 插入新的資料

-- INSERT INTO <表名> (<列名清單>) 
-- VALUES (<值清單>)
           

全字段插入:

INSERT INTO t_user(u_id,u_number,u_name,u_age,u_sex) 
VALUES(NULL,10001,'張三', 24, DEFAULT);
           

– null 對應自動增長的值,

– default 對應預設值;

– 插入的值,必須與字段清單一一對應。

INSERT INTO t_user(u_id,u_number,u_name,u_age,u_sex) 
VALUES(10003,10002,'李四', 23, '女');

INSERT INTO t_user(u_name,u_age,u_sex,u_id,u_number) 
VALUES('王二小', 15, '女',10004,10003);
           

全字段插入時,省略字段清單:

值的順序,按照建立表的列的先後來安排值。
INSERT INTO t_user 
 VALUES(10005,10004,'王小三', 18, '女');

INSERT INTO t_user 
 VALUES(NULL,10005,'王小4', 18, '女');
           

插入多行資料的方法:

INSERT INTO t_user 
 VALUES
 (NULL,10006,'蘇小姐',18,'女'),
 (NULL,10007,'蘇二姐',19,'女'),
 (NULL,10008,'蘇大姐',20,'女');  
           

插入指定列的資料

INSERT INTO t_user(u_number,u_name,u_age)
VALUES(10009,'秋實', 19);
								 -- Column 'u_number' cannot be null, u_number 設定了null.
INSERT INTO t_user(u_name,u_age,u_number)
VALUES('秋實3','323','12122');
           

修改 更新資料

update 表名 set 列名=‘值1’,列名2=‘值2’,… where 表件表達式;

如何沒有where,就會把所有行都修改。

UPDATE t_user SET u_number = '10010' WHERE u_name = '秋實2' AND u_age = 19;

UPDATE t_user SET u_number = '10011' WHERE u_id = '10012';

UPDATE t_user SET u_number = '10012',u_age = 27 WHERE u_id ='10014';

UPDATE t_user SET u_sex = '0';
           

删除姓名叫王小4的名稱

UPDATE t_user SET u_name = NULL WHERE u_name='王小4';
-- update t_user set u_id = null where u_id=10000;
           
如果要删除某列的值,隻需要将該列設定為NULL即可。當然,這樣做的前提是該列允許為空,即沒有非空限制。

4. 删除表的資料;

4.1 delete删除表的資料;不能删除表的結構;

delete from 表名 where 條件表達式;

删除user_bk中, 11号學生

DELETE FROM user_bk WHERE u_number = '11';         -- 删除滿足條件的資料行

DELETE FROM user_bk ;                              -- 沒有條件時,删除所有的資料行;
           

4.2 truncate 删除表的所有資料

TRUNCATE user_bk;
           

4.3 drop table 删除表的所有資料及表的結構

delete from 與truncate 的差別:

DELETE會記錄日志,意味着删除後的資料還可以恢複,但是效率低。

TRUNCATE不會記錄日志,删除後的資料不能恢複,但是效率高。

TRUNCATE不能用于有外鍵限制引用的表。

DELETE FROM t_user WHERE u_number = 10001;

     Cannot delete or update a parent row: a foreign key constraint fails 
     (`it1997`.`t_score`, CONSTRAINT `t_score_ibfk_1` FOREIGN KEY (`s_u_number`) 
     REFERENCES `t_user` (`u_number`))
           
mysql初步認知
Joker:世界對弱者的無情,比任何盾牌還要堅固!

繼續閱讀