約定:
shell>window下輸入的命令
mysql>進入MySQL程序后,輸入的MySQL的命令
一、SQL簡介
1、SQL:Structured Query Language結構化查詢語言
他是客戶與數據庫打交道的通道
2、SQL是有工業標准的。ANSI
符合工業標准的SQL,稱之為普通話。
不同的數據庫都在SQL工業標准的基礎上進行擴展,擴展的部分稱之為方言。
3、驗證安裝是否成功
shell>mysql -u root -p
mysql>SHOW DATABASES; //顯示目前有幾個庫
二、DDL:數據定義語言 Data Definition Language
作用:定義數據庫或者表結構的。
操作的對象:數據庫或表的結構的。
關鍵字:CREATE ALTER DROP
創建一個名稱為mydb1的數據庫。
mysql>CREATE DATABASE mydb1;
查看數據庫的創建細節
mysql>SHOW CREATE DATABASE mydb1;
創建一個使用gbk字符集的mydb2數據庫。
mysql>CREATE DATABASE mydb2 CHARACTER SET gbk;
創建一個使用gbk字符集,並帶校對規則的mydb3數據庫。
mysql>CREATE DATABASE mydb3 CHARACTER SET gbk COLLATE gbk_chinese_ci;
查看當前數據庫服務器中的所有數據庫
mysql>SHOW DATABASES;
查看前面創建的mydb2數據庫的定義信息
mysql>SHOW CREATE DATABASE mydb1;
刪除前面創建的mydb3數據庫
mysql>DROP DATABASE mydb3;
創建表之前一定先選擇數據庫
mysql>USE test;
創建一個員工表
mysql>CREATE TABLE employee(
id int,
name varchar(200),
gender varchar(10),
birthday date,
entry_date date,
job varchar(200),
salary float(8,2),
resume text
);
顯示當前數據庫中的所有表格
mysql>SHOW TABLES;
在上面員工表的基本上增加一個image列。
mysql>ALTER TABLE employee ADD image blob;
查看表結構的定義
mysql>DESC employee;
修改job列,使其長度為60。
mysql>ALTER TABLE employee MODIFY job varchar(60);
刪除image列。
mysql>ALTER TABLE employee DROP image;
表名改為user。
mysql>RENAME TABLE employee TO user;
查看表的創建細節
mysql>SHOW CREATE TABLE user;
修改表的字符集為gbk
mysql>ALTER TABLE user CHARACTER SET gbk;
列名name修改為username
mysql>ALTER TABLE user CHANGE name username varchar(100);
三、DML:Data Manipulation Language 數據操作語言
作用:操作表中的數據的。
關鍵:INSERT UPDATE DELETE
特別注意:日期或字符串、字符要使用單引號引起來。
查看表中的所有記錄
mysql>SELECT * FROM user;
使用insert語句向表中插入三個員工的信息。
建議:mysql>INSERT INTO user (id,username,gender,birthday,entry_date,job,salary,resume) VALUES (1,'zql','0','1991-09-07','2013-04-
12','CTO',10000.00,'beauty');
mysql>INSERT INTO user VALUES (2,'gfy','1','1987-09-07','2013-04-12','CEO',10000.00,'hand');
mysql>INSERT INTO user (id,username,gender,birthday,entry_date,job,salary,resume) VALUES (3,'王翔雲','1','1989-09-07','2013-04-12','UFO',10000.00,'good
boy');
插入中文時的問題:(編碼問題)
查看數據庫目前的各種編碼:
mysql>SHOW VARIABLES LIKE 'character%';
通知服務器客戶端使用的編碼字符集
mysql>SET character_set_client=gbk;
顯示時亂碼
mysql>SET character_set_results=gbk;
將所有員工薪水修改為5000元。
mysql>UPDATE user SET salary=5000;
將姓名為’王翔雲’的員工薪水修改為3000元。
mysql>UPDATE user SET salary=3000 WHERE username='王翔雲';
將姓名為’王翔雲’的員工薪水修改為4000元,job改為CMO。
mysql>UPDATE user SET salary=4000,job='CMO' WHERE username='王翔雲';
將zql的薪水在原有基礎上增加1000元。
mysql>UPDATE user SET salary=salary+1000 WHERE username='zql';
刪除表中名稱為’王翔雲’的記錄。
mysql>DELETE FROM user WHERE username='王翔雲';
刪除表中所有記錄。
mysql>DELETE FROM user;(一條一條的刪除)
使用TRUNCATE刪除表中記錄。
mysql>TRUNCATE user;(摧毀整張表,然后重建表結構)
四、DQL簡單的:Data Query Language
關鍵字:SELECT
查詢表中所有學生的信息。
mysql>SELECT * FROM student;(不建議使用)
mysql>SELECT id,name,chinese,english,math FROM student;
查詢表中所有學生的姓名和對應的英語成績。
mysql>SELECT name,english FROM student;
過濾表中重復數據。
mysql>SELECT DISTINCT english FROM student;
SELECT語句支持一些基本的運算
在所有學生數學分數上加10分特長分。
mysql>SELECT id,name,math+10 FROM student;
統計每個學生的總分。
mysql>SELECT name,chinese+english+math FROM student;
使用別名表示學生分數。
mysql>SELECT name AS 姓名,chinese+english+math 總分 FROM student;
查詢姓名為王五的學生成績
msyql>SELECT name,english,chinese,math FROM student WHERE name='王五';
查詢英語成績大於90分的同學
msyql>SELECT name,english,chinese,math FROM student WHERE english>90;
查詢總分大於200分的所有同學
mysql>SELECT name,chinese+english+math FROM student WHERE (chinese+english+math)>200;
WHERE語句支持運算表達式
Like語句中,% 代表零個或多個任意字符,_ 代表一個任意字符,例first_name like ‘_a%’;
查詢英語分數在 80-90之間的同學。
mysql>SELECT * FROM student WHERE english BETWEEN 84 AND 85;
查詢數學分數為89,90,91的同學。
mysql>SELECT * FROM student WHERE math IN (89,90,91);
查詢所有姓李的學生成績。
mysql>SELECT * FROM student WHERE name LIKE '李%';
查詢數學分>80,語文分>80的同學。
mysql>SELECT * FROM student WHERE math>80 AND chinese>80;
對數學成績排序后輸出。
mysql>SELECT * FROM student ORDER BY math;//默認是升序
對總分排序后輸出,然后再按從高到低的順序輸出
mysql>SELECT name,chinese+english+math FROM student ORDER BY (chinese+english+math) DESC;
對姓李的學生數學成績排序輸出
mysql>SELECT name,math FROM student WHERE name LIKE '李%' ORDER BY math;
五、數據完整性
三個方面:
1、實體完整性:規定表中的一行在表中是唯一的實體。
一般是通過定義主鍵的形式來實現的。
關鍵字:PRIMARY KEY
特點:不能為null,必須唯一
CREATE TABLE SHANG_HAI1(
id int PRIMARY KEY,
name varchar(100)
);
//實際開發中不建議使用。
CREATE TABLE shanghai2(
id int PRIMARY KEY auto_increment,
name varchar(100)
);
insert into shanghai2 (name) values('aa');
2、域完整性
指數據庫表的列(即字段)必須符合某種特定的數據類型或約束。
NOT NULL:不能為空
UNIQUE:必須唯一
CREATE TABLE shanghai3(
id int PRIMARY KEY,
name varchar(100) NOT NULL,
idnum varchar(100) unique
);
關於主鍵:
(建議)邏輯主鍵:給編程人員用的。與具體業務無關
業務主鍵:用戶也可以用。與具體業務有關了。
3、參照完整性(多表設計)
一對多
create table department(
id int primary key,
name varchar(100)
);
create table employee(
id int primary key,
name varchar(100),
salary float(8,2),
dept_id int,
constraint dept_id_fk foreign key(dept_id) references department(id)
);
多對多
create table teacher(
id int primary key,
name varchar(100),
salary float(8,2)
);
create table student1(
id int primary key,
name varchar(100),
grade varchar(10)
);
create table teacher_student1(
t_id int,
s_id int,
primary key(t_id,s_id),
constraint t_id_fk foreign key(t_id) references teacher(id),
constraint s_id_fk foreign key(s_id) references student1(id)
);
一對一
create table human(
id int primary key,
name varchar(100)
);
create table idcard(
id int primary key,
num varchar(100),
constraint huanm_id_fk foreign key(id) references human(id)
);