DDL 數據定義語言 create(建表) alter(修改屬性) drop(移除) truncate(清除數據回收空間)
DQL 數據查詢語言 select(查詢)
DML 數據操作語言 update(修改表) delete(刪除記錄) insert(插入記錄)
DCL 數據控制語言 grant(授權) revoke(回收權限) commit(提交事務) rollback(回收事務)
/* 創建數據庫MyShool */
CREATE DATABASE test_shool;
/* 設置數據庫編碼 */
DEFAULT CHARACTER
SET utf8;
/* 修改表的編碼格式 */
ALTER TABLE 表名 CONVERT TO CHARACTER
SET utf8mb4; #utf8不是數據utf-8編碼格式,要用utf8mb4
/* 移除表grade */
USE MyShool DROP TABLE grade;
建表語句:
create table [if not exists] 表名
(列1的名字 數據類型(長度) [屬性] [索引] [註釋],
列2的名字 數據類型(長度) [屬性] [索引] [註釋],
..., 列n的名字 數據類型(長度) [屬性] [索引] [註釋],primary key(列名稱)
)ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 comment="註釋";
/* 新建表 */
CREATE TABLE test_grade (
gradel_id INT (11),
grade_name VARCHAR (50)
);
/* 顯示錶內容 */
SELECT
*
FROM
test_grade;
/* 顯示錶結構 */
DESCRIBE test_grade;
/*查看建表語句*/
show create table [表名];
/*查看錶信息語句*/
select * from information_schema.tables [where table_name="條件名需要大寫"];
/*查看字段信息語句*/
select * from information_schema.columns;
/* 新建表subject 加`號與關鍵字區分 */
CREATE TABLE `test_subject` (
subject_no INT,
subject_name VARCHAR (50),
class_hour INT,
grade_id INT
);
#######################alter
/* 註釋表 */
alter table student comment = '註釋內容';
/* 註釋列 */
alter table student modify studentname comment '註釋內容';
/* 增加列 */
alter table 表名 add (列1 類型(長度),列2...);
/* 刪除列 */
alter table 表名 drop column 列名;
/* 修改列 */
alter table 表名 change 原列 新列 類型;
/* 修改列類型 */
alter table 表名 modify 列名 數據類型 ;
alter table 表名 modify 列名 列的屬性 comment '你要註釋的內容'
ALTER TABLE grade MODIFY gradeId INT COMMENT '班級編號';
ALTER TABLE grade MODIFY gradeName VARCHAR (50) COMMENT '班級編號';
ALTER TABLE `subject` -- 表名
MODIFY subjectNo INT (11) COMMENT '科目編號' -- 更換表名
-- 語法: alter table 表名 rename to 新的表名;
ALTER TABLE grade1 RENAME TO grade;
-- 在表建好過後添加一列或多列
-- alter table 表名 add (列名1 列的數據類型,列名2 列的數據類型);
ALTER TABLE grade ADD (hei VARCHAR(50)) ALTER TABLE grade ADD (hello INT(11));
-- 刪除列
-- 語法:alter table 表名 drop column 你要刪除的列名;
ALTER TABLE grade DROP COLUMN hei;
ALTER TABLE grade DROP COLUMN hello;
-- 修改列名
-- 語法:alter table 表名 change 原有的列名 新的列名 數據類型;
ALTER TABLE grade CHANGE test1 test VARCHAR (10);
ALTER TABLE grade CHANGE test testReName VARCHAR (50);
-- 修改屬性
-- 語法:alter table 表名 modify 你要修改的列名 數據類型 not null;
ALTER TABLE grade MODIFY gradeName VARCHAR (40) NOT NULL;
/*
* 主鍵約束
* 外鍵約束
* 唯一約束
* 非空約束
* 檢查約束
* 檢查約束
* 增加約束是爲了保持數據的完整性
*/
/* 主鍵約束 */
USE myshool ALTER TABLE student ADD CONSTRAINT pk_student_StudentNo PRIMARY KEY student (studentNo);
ALTER TABLE grade ADD CONSTRAINT pk_grade_GradeID PRIMARY KEY grade (GradeID);
/* 外鍵約束 */
ALTER TABLE `student` ADD CONSTRAINT fk_student_GradeId FOREIGN KEY (GradeID) REFERENCES grade (GradeID);
/* 唯一約束 */
ALTER TABLE grade ADD CONSTRAINT uk_grade_GradeName UNIQUE (GradeName);
/* 非空約束 */
ALTER TABLE grade ADD GradeID INT (11) NOT NULL;
/* 檢查約束 */
ALTER TABLE student ADD CONSTRAINT ck_student_Sex CHECK (sex = '男' OR sex = '女');
/* 插入一條數據 */
INSERT INTO grade
VALUES
(4, '四年級');
/* 刪除數據 */
DELETE
FROM
test_grade
WHERE
grade_id = 2;#條件
/* 修改數據 */
UPDATE test_grade
SET grade_id = 1
WHERE
grade_name = '大一';
/* 插入多條數據 */
INSERT INTO test_student ()
VALUES
(
StudentNo #,
#StudentName,
#Sex,
#Phone,
#Address,
#Email,
#IdentityCard
)
VALUES
(
1101 #,
#'明明',
#'男',
#13500000001,
#'深圳大學城',
#'[email protected]',
#441522144875485688
);
/* where 判斷 */
SELECT DISTINCT#排除重複的 關鍵字
(student_no)
FROM
result
WHERE
student_result IS NOT NULL;
SELECT
*
FROM
SUBJECT AS c1
JOIN SUBJECT AS c2 ON c1.subjectno = c2.gradeID;
/* 左連接 */
SELECT
student.StudentName,
result.StudentNo
FROM
student
LEFT JOIN result ON SELECT
*
FROM
student
LEFT JOIN result ON student.StudentNo = result.StudentNo ;
/* 右連接 */
SELECT
student.StudentName,
result.StudentNo
FROM
student
LEFT JOIN result ON SELECT
*
FROM
student
RIGHT JOIN result ON student.StudentNo = result.StudentNo ;
/* 子查詢 */
SELECT
studentname
FROM
student
WHERE
studentno IN (
SELECT
studentno
FROM
result
WHERE
subjectno IN (
SELECT
subjectno
FROM
SUBJECT
WHERE
subjectname = 'java基礎'
)
GROUP BY
studentresult
)
LIMIT 5;
/* 聯合查詢 */
SELECT [ALL | DISTINCT]
{ * | table.* | [ table.field1 [ as alias1] [,table.field2 [as alias2]][,…]] }
FROM table_name [ as table_ alias ]
[left|out|inner join table_name2 ] #聯合查詢
[ WHERE … ] #指定結果需滿足的條件
[ GROUP BY …] #指定結果按照哪幾個字段來分組
[HAVING …] #過濾分組的記錄必須滿足的次要條件
[ ORDER BY… ] #指定查詢記錄按一個或者多個條件排序
[ LIMIT { [ offset,] row_count | row_count OFFSET
/* 統計函數 */
COUNT(元素集) #統計數量
SUM(元素集) #合計
AVG(元素集) #平均值
MAX(元素集) #最大值
MIN(元素集) #最小值
/* 分組查詢 */
SELECT
`subject`.SubjectName AS 科目名,
result.subjectno AS 科目ID,
AVG(result.studentresult) AS 平均分,
MAX(result.studentresult) AS 最高分,
MIN(result.studentresult) AS 最低分
FROM
`result`
JOIN SUBJECT ON result.SubjectNo = `subject`.SubjectNo # 內連接
GROUP BY
result.SubjectNo # 根據subjectno分組
HAVING
AVG(result.studentresult) >= 60; # 篩選條件
/* 事務託管 */
/* 事務回滾 */
SET autocommit = 0;
START TRANSACTION;
UPDATE account
SET money = money - 500
WHERE
id = 1;
#commit;
ROLLBACK;
SET autocommit = 1;
/**/
select * from account;
/* 事務提交 */
SET autocommit = 0;
START TRANSACTION;
UPDATE account
SET money = money - 500
WHERE
id = 1;
commit;
#ROLLBACK;
SET autocommit = 1;
/* 索引 優化查詢 */
/* 主鍵索引(PRIMARY KEY)*/
CREATE TABLE `表名` (
`GradeID` INT(11) AUTO_INCREMENT PRIMARY KEY,
#或 PRIMARY KEY(`GradeID`)
)
/* 唯一索引(UNIQUE)*/
CREATE TABLE `Grade` (
`GradeID` INT(11) AUTO_INCREMENT PRIMARY KEY,
`GradeName` VARCHAR(32) NOT NULL UNIQUE
#或 UNIQUE KEY `GradeID` (`GradeID`)
)
/* 常規索引(INDEX)*/
CREATE TABLE `result` (
//省略一些代碼
INDEX/KEY `ind` (`studentNo`, `subjectNo`)
)
ALTER TABLE `result` ADD INDEX `ind` (`studentNo`, `subjectNo`);
/* 全文索引(FULLTEXT)*/
CREATE TABLE `student` (
#省略一些SQL語句
FULLTEXT (`StudentName`)
)ENGINE=MYISAM;
ALTER TABLE employee ADD FULLTEXT (`first_name`);
/* 追加索引 */
ALERT TABLE 表名 ADD 索引類型(數據列名)
/* 刪除索引 */
DROP INDEX 索引名 ON 表名
ALTER TABLE 表名 DROP INDEX 索引名
ALTER TABLE 表名 DROP PRIMARY KEY
/* 查看索引 */
SHOW INDEX(或KEYS) FROM 表名
導入表
mysql
mysql>create database school;
mysql>use school;
mysql>source 路徑(school.sql);
(或將school.sql換爲school.teacher.sql / school.teacher.student.sql)
導出數據庫
mysqldump --databases db1 db2 > 路徑(db1.db2.sql)
mysqldump -h host -u user -p pass --databases dbname > file.dump
/*********** ***********************************************************************/
引用的文檔
Database changed
mysql> select database(); 顯示當前選擇的數據庫
mysql> show tables; 顯示當前數據庫中存在的表
mysql> select * from db; 顯示錶(db)的內容
mysql> describe mytable; 顯示錶的結構
或show columns from 表名;
mysql> select
-> user()
-> \c
mysql>
練習如下操作:
mysql> select
-> USER()
-> ,
-> now()
->;
mysql> Select (20+5)*4;
mysql> Select (20+5)*4,sin(pi()/3);
mysql> Select (20+5)*4 AS Result,sin(pi()/3); (AS: 指定假名爲Result)
查看MySQL當前用戶佔用的連接數
命令: show processlist;
如果是root帳號,你能看到所有用戶的當前連接。如果是其它普通帳號,只能看到自己佔用的連接。
show processlist;只列出前100條,如果想全列出請使用show full processlist;
mysql> show processlist;
一、數據庫:
mysql> CREATE DATABASE abccs; 創建一個數據庫
mysql> USE abccs 選擇使用數據庫
mysql> drop database 數據庫名; 刪除數據庫
二、表:
1。創建一個表mytable:
mysql> CREATE TABLE mytable
-> (
-> name VARCHAR(20),
-> sex CHAR(1),
-> birth DATE,
-> birthaddr VARCHAR(20)
-> );
建立一個員工生日表,表的內容包含員工姓名、性別、出生日期、出生城市。
由於name、birthadd的列值是變化的,因此選擇VARCHAR,其長度不一定是20。
可以選擇從1到255的任何長度,如果以後需要改變它的字長,可以使用ALTER TABLE語句。
性別只需一個字符就可以表示:"m"或"f",因此選用CHAR(1);
birth列則使用DATE數據類型。
2。查詢剛添加的記錄:
mysql> select * from mytable;
Empty set (0.00 sec) 這說明剛纔創建的表還沒有記錄。
3。添加新記錄:
mysql> insert into mytable
-> values
->(
->'abccs',
->'f',
->'1977-07-07',
->'china'
->);
4、用文本方式將數據裝入一個數據庫表:
一條一條地添加新記錄,實在太麻煩。
創建一個文本文件“mysql.txt”,按表結構排好每行每條記錄,用定位符(tab)把值分開。
abccs f 1977-07-07 china
mary f 1978-12-12 usa
tom m 1970-09-02 usa
使用此命令將文本文件“mytable.txt”裝載到表中:
mysql> Load data local infile "mytable.txt" into table mytable;
數據傳入命令load data local infile "文件名" into table 表名;
注意:你最好將文件複製到mysql/bin目錄下,並且要先用use命令選表所在的庫。
5。更新記錄:
mysql> update mytable set birth = "1973-09-02" where name = "tom";
6。刪除記錄:
mysql> delete from mytable where id=10; //刪除掉所有id=10的記錄;
mysql> delete from mytable where id=10 limit 1; //限制刪除掉1條id=10的記錄;
mysql> delete from mytable //刪除一個表的全部記錄;
mysql> DELETE FROM t1 WHERE C>10;
mysql> drop table tablename1,tablename2,…; //刪除整一個表或多個表,小心使用。
7。重命名錶:
mysql> alter table t1 rename t2;
修改字段屬性
mysql> alter table tablename modify id int(10) unsigned auto_increment primary key not null
修改默認值
mysql> alter table tablename alter id default 0
給字段增加primary key
mysql> alter table tablename add primary key(id);
刪除primary key
1、alter table tablename drop primary key;
2、drop primary key on tablename;
修改table表數據引擎
mysql> alter table tableName ENGINE = MyISAM (InnoDB);
增加一新字段名:
mysql> alter table mytable add column single char(1);
mysql> ALTER TABLE table ADD field INT(11) UNSIGNED NOT NULL
刪除字段
mysql> alter table t2 drop column c;
實例:
爲了改變列a,從INTEGER改爲TINYINT NOT NULL(名字一樣),
並且改變列b,從CHAR(10)改爲CHAR(20),同時重命名它,從b改爲c:
ALTER TABLE t2 MODIFY a TINYINT NOT NULL, CHANGE b c CHAR(20);
增加一個新TIMESTAMP列,名爲d:
ALTER TABLE t2 ADD d TIMESTAMP;
在列d上增加一個索引,並且使列a爲主鍵:
ALTER TABLE t2 ADD INDEX (d), ADD PRIMARY KEY (a);
增加一個新的AUTO_INCREMENT整數列,命名爲c:
ALTER TABLE t2 ADD c INT UNSIGNED NOT NULL AUTO_INCREMENT,ADD INDEX (c);
注意,我們索引了c,因爲AUTO_INCREMENT柱必須被索引,
並且另外我們聲明c爲NOT NULL,因爲索引了的列不能是NULL。
使用name列的頭10個字符創建一個索引:
CREATE INDEX part_of_name ON customer (name(10));
三、數據的備份與恢復:
導出和導入數據:(命令在DOS的mysql/bin目錄下執行)
導出表
mysqldump --opt school > school.sql
註釋:將數據庫school中的表全部備份到school.sql文件,school.sql是一個文本文件,
文件名任取,打開看看你會有新發現。
mysqldump --opt school teacher student > school.teacher.student.sql
註釋:將數據庫school中的teacher表和student表備份到school.teacher.student.sql文
件,school.teacher.student.sql是一個文本文件,文件名任取,打開看看你會有新發現。
導入表
mysql
mysql>create database school;
mysql>use school;
mysql>source school.sql;
(或將school.sql換爲school.teacher.sql / school.teacher.student.sql)
導出數據庫
mysqldump --databases db1 db2 > db1.db2.sql
註釋:將數據庫dbl和db2備份到db1.db2.sql文件,db1.db2.sql是一個文本文件,文件名
任取,打開看看你會有新發現。
(舉個例子:
mysqldump -h host -u user -p pass --databases dbname > file.dump
就是把host上的以名字user,口令pass的數據庫dbname導入到文件file.dump中。)
導入數據庫
mysql < db1.db2.sql
複製數據庫mysqldump --all-databases > all-databases.sql
註釋:將所有數據庫備份到all-databases.sql文件,all-databases.sql是一個文本文件,文件名任取。
導入數據庫
mysql
mysql>drop database a;
mysql>
修改註釋
ALTER TABLE table_name COMMENT='這是表的註釋'
ALTER table table_name MODIFY `column_name` datetime DEFAULT NULL COMMENT '這是字段的註釋'