建立一個值得字符集的數據庫mysql
create database name character set utf8; //指定utf8類型的數據庫sql
更改字符集 alter database name character set gbk; //改成了gbk字符集數據庫
建立校對規則: 用於排序 如張三李四 能夠按照拼音、筆畫排序服務器
create database name character set utf8 collate uff8_unicode_ci;函數
create table users(表名)(大數據
id int,編碼
name varchar(40),spa
password varchar(40),code
birthday dateorm
);
表的數據類型中,除了char 、varchar 必須指定長度,其它類型都有默認長度
字符串型 VARCHAR、CHAR
char定長 char(8) ---- 向數據庫存入hello 存爲hello+3個空格
⼤大數據類型 BLOB、TEXT
text 文本類型數據,主要存儲字符文件 --- 文本文件
blob 二進制文件 ,存儲任何類型文件(音樂、電影);longtext longblob 最大能夠保存4GB文件
數值型 TINYINT、SMALLINT、INT、BIGINT、FLOAT、DOUBLE
tinyint (byte) smallint(short) int(int) bigint(long)
邏輯性 BIT
bit(8)表示8位 bit(32)表示32位至關於 int
日期型 DATE、TIME、DATETIME、TIMESTAMP
date 只能保存日期
time 只能保存時間
datetime 日期和時間都有
timestamp 日期和時間都有,自動更新到當前時間
經過desc語句 查看錶結構
語法:desc 表名;
主鍵約束(惟一標識一條記錄)---- primary key 不能爲空、不能重複 通常自動增加 mysql爲 auto_increment
惟一約束(該字段內容不容許重複)----- unique 一張表只有最重要那個字段才能做爲主鍵
非空(值不能爲空)----- not null
create table employee (
id int primary key not null auto_increment ,
name varchar(40) unique not null,
gender varchar(10) not null,
);
向已有數據表添加一列 : alter table 表名 add 列名 類型(長度) 約束;
修改已有數據表一列類型、長度: alter table 表名 modify 列名 類型(長度) 約束;
修改已有數據表一列的名稱 : alter table 表名 change 舊列名 新列名 類型(長度) 約束;
刪除已有一列 : alter table 表名 drop 列名;
修改表名: rename table 舊錶名 to 新表名;
修改表的字符集: alter table student character set utf8;
表刪除 drop table 表名;
show tables; 查看當前數據 中全部表
向表中添加一列: alter table employee add image varchar(255);
修改一列的長度、類型 alter table employee modify job varchar(60) not null;
修改一列的名字 alter table user change name username varchar(40) unique not null;
刪除一列。 alter table employee drop gender;
修改表名。 rename table employee to user;
修改表的字符集爲 alter table user character set utf8;
show create table user; 顯示錶user的信息
表中插入數據
1,insert into employee(id,name,birthday) values(null,'zs','1990-01-10');字符串添加單引號 字符、日期單引號
2,insert into employee(name) values('zs'); //只插入部分
3,insert into employee values(null,'lisi',null); //第一種簡寫
mysql有六處使用了字符集,分別爲:client 、connection、database、results、server 、system。
服務器端相關:database server system(永遠沒法修改 就是utf-8)
客戶端相關 connection client results
解決中文插入亂碼問題:將客戶端相關三個編碼集設置 gbk
set names gbk; ----- 快速設置客戶端相關三個編碼集
修改mysql 配置文件,永久改變客戶端編碼集 ----- mysql/my.ini
[mysql] ---- 客戶端配置 //修改後注意重啓mysql服務
[mysqld] ---- 服務器端配置
記錄修改操做
update 表名 set 列名=值,列名=值 where條件語句
update employee set salary = 3000 where name = 'zs';
條件比較前添加 binary 使比較更加精確嚴格,不然,'ZS '也會被當成‘zs'
update employee set salary = salary+1000 where name = 'wangwu'; //對salary進行加1000操做
沒有where語句,對全部數據行進行更新
update employee set salary = 5000 ; //全部人的工資設爲5000
表數據刪除
delete from 表名 where 條件語句;
delete from employee where name = 'zs';
truncate employee; delete from employee; //刪除整個表數據
truncate 刪除記錄後不可恢復的,不受事務管理,原理:刪除整個表,delete能夠rollback;回滾恢復
表數據查找
SELECT *|column1, column2. column3 FROM table;
select * from student; //查詢全部列
select name from student; //查詢名字列
select distinct name from student; //查詢結果 不顯示重名,distinct去重複
查詢時運算
select name,math+chinese+enlish from student; //查詢姓名 和總分 也能夠加數字 math+10
查詢時更改列名 as ;as能夠省略
select name as 姓名 from student; //列 更名爲 姓名
select name 姓名 from student;
查詢時篩選 比較
select name from student where math > 90;
select name from studetn where name like '李%';取出全部姓李的
select name from studetn where name like '李_';取出姓李的 名字兩個字的
and 和 or運算優先級 ; and的高,先執行
查詢時排序 order by 列 asc|desc; asc升序 desc降序
select name from student order by math desc; //按照數學高到低排序
表函數
count 返回查詢結果的條數
select count(*) from student where math > 90; //查詢數學大於90 的人數
sum對一列求和
select sum(math) from student ; //查詢數學總分
avg 求一列的平均值
select avg(math) from student; //求平均值 ;注意 null不參與運算
max,min 找出一列中最大最小的值
select max(math) from student; //找出數學成績最高的
表查詢分組
group by 列; 篩選 having;
select name from student group by class having math > 80; //選出數學大於80 的名字 按照班級分組
語法:select * from a inner join b on a.id = b.id;
簡化:select * from a,b where a.id = b.id;
外鏈接:用一個表的查詢數據去查詢另外一個表
表a
表b
select * from a left outer join b on a.A_ID = b.A_ID ; //先查詢a表 而後 用a表 A_ID 去查表b 有寫出,沒有爲null
select * from a right outer join b on A.A_ID = B.A_ID ;
全鏈接 mysql不支持 可使用union 合而且去掉重複的
select * from A left outer join B on A.A_ID = B.A_ID
union
select * from A right outer join B on A.A_ID = B.A_ID;
關聯子查詢:將第一個查詢結果 ,做爲第二個查詢條件
select name from student where age = (select max(age) from student); //年齡最大學員的名字