mysql基礎總結

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 '這是字段的註釋'

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章