1 表操作(增刪查改)
1, 創(chuàng)建表 :CREATE TABLE person(NAME VARCHAR(20),sex CHAR(2),age INT);
2, 查看庫下面的所有表: show tables;
3, 刪除表: drop table 表名;
4, 修改表名: alter table 表名 rename [to] 新表名;
5, 清空表數據: truncate 表名;
6抬探,查看表結構:desc 表名牡拇;
//清除創(chuàng)建新表
TRUNCATE TABLE account;
truncate 與 delete
truncate相當于刪表再重建一張同樣結構的表,操作后得到一張全新表.
而delete是從刪除所有的層面來操作的.
Trucate相當于把舊的表扔了重畫一張,
Delete相當于用橡皮把學籍表的數據庫擦掉.
如果決定全清空的下,truncate速度更快一些.
注意:
1.創(chuàng)建庫、表名是不要使用mysql關鍵字或者保留字丹弱;
2.使用mysql時出現中文亂碼,創(chuàng)表時加入character set utf8;
3.一般不推薦使用中文數據庫;
將數據裝入表中
1, insert 插入表內容
1.1 不指定字段鳍徽,必須指定全部字段的值
INSERT INTO employees VALUES
(12, 'Mary', 18, '男', '2017-10-11', '2017-11-11', 'job', 5500, '備注');
1.2 插入指定字段的數據
INSERT INTO employees (id, NAME, age, sex)
VALUES(14, '李五', NULL , '女');
1.3一次插入多條數據
INSERT INTO employees (id, NAME, age, sex)
VALUES(15, '李五', 19 , '女'),(16, '李六', 20 , '男');
2, 加載文本文件內容到表中
文本文件內容要按照表定義的類型填寫敢课,每行包含一個記錄阶祭,
用定位符(tab)把值分開,可以使用NULL值直秆。為了在文本文件中表示這些內容濒募,使用\N(反斜線,字母N)圾结。
mysql> LOAD DATA LOCAL INFILE '/path/pet.txt' INTO TABLE pet;
請注意如果用Windows中的編輯器(使用\r\n做為行的結束符)創(chuàng)建文件瑰剃,應使用:
mysql> LOAD DATA LOCAL INFILE '/path/pet.txt' INTO TABLE pet
-> LINES TERMINATED BY '\r\n';
修改表頭 alter用法
1:刪除列
ALTER TABLE 【表名】 DROP 【列名】
2:增加列
ALTER TABLE 【表名】 ADD 【列名】 INT NOT NULL COMMENT '注釋說明'
★★★ 插入列 在已有列后面插入新列
ALTER TABLE 【表名】 ADD 【插入新列】 INT AFTER 【已有列名】;
3:修改列的類型信息
ALTER TABLE 【表名】 CHANGE 【列名】【新列名(這里可以用和原來列同名即可)】 BIGINT NOT NULL COMMENT '注釋說明'
4:重命名列
ALTER TABLE 【表名】 CHANGE 【列名】【新列名】 BIGINT NOT NULL COMMENT '注釋說明'
5:重命名表
ALTER TABLE 【表名】 RENAME 【表新名】
6:刪除表中主鍵
Alter TABLE 【表名】 drop primary key
7:添加主鍵
ALTER TABLE 【表名】 ADD CONSTRAINT PK_SJ_RESOURCE_CHARGES PRIMARY KEY (resid,resfromid)
8: 添加索引
ALTER TABLE 【表名】 add index INDEX_NAME (name);
9: 添加唯一限制條件索引
ALTER TABLE 【表名】 add unique emp_name2(cardnumber);
10: 刪除索引
alter table 【表名】 drop index emp_name;
查看 show
1: 查看創(chuàng)建表的語句
show create table temp
2: 查看表
show tables;
查詢 select
1: 查詢所有字段內容
SELECT * FROM temp;
2: 查詢指定字段內容
SELECT id, NAME FROM temp;
3: 去除重復
SELECT DISTINCT job FROM temp;
只改變查詢內容,不改變原來表中的數據
4: 查詢運算
SELECT salary*10 FROM temp;
5: 取別名
SELECT NAME AS '名字' FROM temp;
SELECT salary + 1000 , salary AS '工資' FROM temp;
條件查詢 where
1: 使用where 進行 條件查詢
SELECT NAME FROM temp WHERE NAME = '李四';
SELECT NAME,salary FROM temp WHERE salary > 500;
2: 不等于
SELECT id,NAME,salary FROM temp WHERE id != 500;
SELECT id,NAME,salary FROM temp WHERE id <> 500;
3: 區(qū)間查詢
SELECT id, NAME FROM book WHERE id BETWEEN 3 AND 7; //查詢id在 3 至 7之間的內容
4: 顯示多個信息
SELECT id, NAME FROM temp WHERE id IN(2,4);
5: 模糊查詢
SELECT id, NAME FROM temp WHERE NAME LIKE '%李%'; //一個或多個字符
SELECT id, NAME FROM temp WHERE NAME LIKE '_李_'; //一個字符
6: 判斷是否為空 null比較特殊,不能使用 = 筝野!= 來判斷
SELECT id, NAME FROM temp WHERE NAME IS NOT NULL;
7: 多個條件同時成立 與
SELECT id, NAME, salary FROM temp WHERE NAME IS NOT NULL AND salary = 200;
8: 多個條件任一成立 或
SELECT id, NAME, salary FROM temp WHERE NAME IS NOT NULL OR salary = 200;
9: 多個條件不成立 非
SELECT id, NAME, salary FROM temp WHERE NOT(salary = 200);
排序 ORDER BY
1: 使用 ORDER BY 對查詢結果進行排序晌姚,asc升序粤剧,desc降序,默認asc升序
SELECT id,NAME,sex,salary FROM temp ORDER BY salary DESC;
2: 排序的列名挥唠,可以是select語句指定的別名 (字符串去掉引號)
SELECT id,NAME AS 姓名,sex,salary FROM temp ORDER BY 姓名 DESC;
3: 還可以用where條件選擇排序內容 ORDER BY 要放后面
SELECT id,NAME AS 姓名,sex,salary FROM temp WHERE id >= 3 ORDER BY 姓名 DESC;
更新表中的內容 updata 修改表數據
1: 使用updata語句修改表中的數據
UPDATE temp SET salary = 500; //無條件
UPDATE temp SET salary = 400 WHERE NAME = '李四'; //帶條件
刪除表內容 delete 修改表數據
1: 刪除指定記錄 如果沒有where條件就全刪了
DELETE FROM temp WHERE id = 5;
函數 COUNT抵恋,SUM,AVG, MAX, MIN, GROUP BY, HAVING
1: 統(tǒng)計所有員工id數 COUNT
SELECT COUNT(id) FROM temp;
2: 統(tǒng)計符合條件的員工id數
SELECT COUNT(id) FROM temp WHERE sex = '男';
3: 字段內容為null不納入統(tǒng)計
SELECT COUNT(id) FROM temp;
SELECT COUNT(NAME) FROM temp;
4: 求和 SUM
SELECT SUM(salary) AS '所有員工工資總和' FROM temp;
SELECT SUM() FROM temp; //0
5: 求平均值 AVG (null不參與計算)
SELECT AVG(salary) FROM temp;
SELECT AVG(salary) FROM temp WHERE sex = '男';
6: 求最大值 MAX
SELECT MAX(salary) FROM temp;
SELECT MAX(salary) FROM temp WHERE sex = '男';
7: 求最小值 MIN
SELECT MIN(salary) FROM temp;
SELECT MIN(salary) FROM temp WHERE sex = '女';
8: 分組 GROUP BY 求男女平均工資
SELECT sex AS '性別', AVG(salary) AS '平均工資' FROM temp GROUP BY sex;
9: 分組 GROUP BY 求男女員工個數
SELECT sex AS '性別', COUNT(sex) AS '員工個數' FROM temp GROUP BY sex;
10: 分組過濾 GROUP BY ... HAVING 平均售價低于60的圖書類別
SELECT class AS '圖書類別', AVG(price) AS '平均售價' FROM book GROUP BY class HAVING AVG(price) < 60;
字符串函數
1: 連接字符串
SELECT CONCAT(id,NAME,author) FROM book;
2: 連接字符串 加分隔符
SELECT CONCAT_WS(' # ',id,NAME,author) FROM book;
3: 統(tǒng)計字符串長度 (根據字節(jié)數)
SELECT NAME, LENGTH(NAME) FROM book;
4: 統(tǒng)計字符串長度 (根據字符數)
SELECT NAME, CHAR_LENGTH(NAME) FROM book;
5: 字母轉換小寫
SELECT NAME, LCASE(NAME) FROM book;
6: 字母轉換大寫
SELECT NAME, UPPER(NAME) FROM book;
7: 去空格以及自定義過濾
SELECT TRIM(' abc '); //去首尾空格
SELECT TRIM(BOTH 'x' FROM 'xxxxabcxxxx'); //自定義過濾 去掉首尾
SELECT TRIM(LEADING 'x' FROM 'xxxxabcxxxx'); //自定義過濾 去掉前面
SELECT TRIM(TRAILING 'x' FROM 'xxxxabcxxxx'); //自定義過濾 去掉后面
8: 截取字符串
SELECT LEFT('abcdefg',5); //左截取 abcde
SELECT RIGHT('abcdefg',3); //右截取 efg
SELECT SUBSTRING('abcdefg',2,3); //中間截取 bcd
9: 替換字符串
SELECT INSERT('abcdefg',2,3,'123'); //替換 a123efg
數值方法
1:四舍五入
SELECT ROUND(3.14159, 4); //3.1416
SELECT ROUND(3.54159, 0); //4
SELECT ROUND(163.456, -2); //200
2:截取
SELECT TRUNCATE(3.14159, 4); //3.1415
SELECT TRUNCATE(123.456, -2); //100
3:取余
SELECT MOD(11, 3); //2
4:向下取整
SELECT FLOOR(44.2); //44
5:向上取整
SELECT CEIL(44.1); //45
日期
1: 日期格式轉換
SELECT DATE_FORMAT('1997-10-04 22:23:00','%H %K %I %r %T %S'); // 22 K 10 10:23:00 PM 22:23:00 00
SELECT STR_TO_DATE('04/31/2004', '%m /%d /%Y'); //2004-04-31
2: 當前時間
SELECT NOW(); //2017-11-28 17:08:15
3: 當前日期
SELECT CURDATE(); //2017-11-28
4: 當前時間
SELECT CURTIME(); //17:08:58
5: 當前月最后一天
SELECT LAST_DAY(NOW()); //2017-11-30
6:返回日期/時間單獨部分
SELECT EXTRACT(YEAR FROM NOW()); //2017
SELECT EXTRACT(MONTH FROM NOW()); //11
SELECT EXTRACT(DAY FROM NOW()); //28
7: 指定日期/時間 增減
SELECT DATE_ADD(NOW(),INTERVAL 1 YEAR); //增加1年 2018-11-28 17:13:58
SELECT DATE_SUB(NOW(),INTERVAL 1 YEAR); //減少1年 2016-11-28 17:14:52
8:兩個日期相隔天數
SELECT DATEDIFF(NOW(),'1988-08-28'); //10684
空值
1:空值函數
SELECT IFNULL(1/0, 'yes');//yes
2:相當于三目運算
SELECT IF(1>2 ,2 ,3);// 3
流程控制
1:相當于 java 里的 switch
SELECT
CASE 11
WHEN 1 THEN 'one'
WHEN 2 THEN 'two'
WHEN 11 THEN '666'
ELSE 'more'
END;
2:相當于 java 里的 IF ELSE
SELECT
CASE
WHEN 1 < 0
THEN '正數'
WHEN 0 = 0
THEN 'is 0'
ELSE '負數'
END;
系統(tǒng)信息函數
1:獲取 MySQL 版本號
SELECT VERSION();
2:服務器的連接次數
SELECT CONNECTION_ID();
3:當前數據庫名
SELECT DATABASE();
4:獲取用戶名的函數 幾種方法結果一樣
SELECT USER();
SELECT SYSTEM_USER();
SELECT SESSION_USER();
SELECT CURRENT_USER();
5:獲取字符集
SELECT CHARSET(NAME) FROM book; //utf8
加密函數
1: 對用戶的密碼進行加密宝磨,該函數是不可逆的弧关。
SELECT PASSWORD('abc'); //\*0D3CED9BEC10A777AEC23CCC353A8C08A633045E;
2: 對普通字符串進行加密,該函數是不可逆的
SELECT PASSWORD('abc'); //\*0D3CED9BEC10A777AEC23CCC353A8C08A633045E
3: 加密函數ENCODE(str, pswd_str)
使用pswd_str作為密碼懊烤,加密str梯醒。使用DECODE()解密結果,結果是一個和str長度相同的字符串腌紧。
SELECT ENCODE('yuxiaohu', 'cry'),LENGTH(ENCODE('yuxiaohu','cry'));// ??Ι?Z> 8
4: 解密函數DECODE(crypt_str,pswd_str)
使用pswd_str作為密碼茸习,解密加密字符串crypt_str,crypt_str是由ENCODE()返回的字符串壁肋。
SELECT DECODE(ENCODE('yuxiaohu','cry'), 'cry');//yuxiaohu