mysql數據庫相關基礎知識01
阿新 • • 發佈:2019-02-07
等於 db2 從表 規則 例子 退出 數據庫概念 基本上 學生成績
數據庫的簡介
1.什麽是數據庫:數據倉庫。訪問必須只能用SQL語句來訪問。數據庫也是一個文件的系統。 2.數據庫的作用:存儲數據的作用。開發任何的應用,都有數據庫。 3.關系型的數據庫:數據庫中保存的都是實體與實體之間的關系。 4.常見的數據庫 * Java開發,必用的兩個數據庫Oracle和MySQL * Oracle數據庫(甲骨文) 大型的數據庫,收費的。 * MySQL數據庫 小型的數據庫,免費開源的。被Oracle收購了(在6.x版本下開始收費了) * SQLServer 微軟的數據庫 * DB2 IBM公司產品,大型的數據庫,收費的。 * SyBASE 退出了歷史的舞臺。PowerDigener(數據庫的設計的工具)
MySQL數據庫的安裝和卸載
1.MySQL數據庫的卸載 * 先找到MySQL的安裝路徑,找到my.ini配置文件。 * basedir="C:/Program Files (x86)/MySQL/MySQL Server 5.5/" -- MySQL安裝路徑(my.ini沒有刪除) * datadir="C:/ProgramData/MySQL/MySQL Server 5.5/Data/" -- MySQL數據存放位置(手動刪除) * 直接通過控制面板卸載程序。 2.安裝MySQL * 安裝的路徑中不能有中文和空格。 3.進行測試 * cmd -- 輸入mysql -u root -p -- 回車 -- 輸入密碼 -- 進入MySQL的服務器。
MySQL數據庫概念
1.總結:一個數據庫的服務器中包含多個數據庫,一個數據庫中有多張表,一個表中包含多個字段(字段和JavaBean的屬性是對應),表中存放是數據,一行數據和一個JavaBean實體對象是對應的。
SQL語言(操作數據庫)
1.Structured Query Language, 結構化查詢語言
2.SQL非過程性的語言
* 過程性的語言:依賴上一條或者上幾條語句執行。
* 非過程性的語言:一條語言,就對應一個返回的結果。
3.SQL語言是基礎
* 在Oracle使用自己的語言,PL/SQL只能在Oracle來說使用。
SQL的分類
SQL的分類 1.DDL 數據定義語言 * 創建數據庫 創建表 創建視圖 創建索引 修改數據庫 刪除數據庫 修改表 刪除表 * create -- 創建 alter -- 修改 drop -- 刪除 2.DML 數據操作語言 * 操作數據 插入數據(insert) 修改數據(update) 刪除數據(delete) 3.DCL 數據控制語言 * if else while 4.DQL 數據查詢語言 * 從表中查詢數據(select)
數據庫的操作(CURD)
創建數據庫(重點)
1.創建數據庫的語法
* 基本的語法:create database 數據庫名稱;
* 正宗的語法:create database 數據庫名稱 character set 編碼 collate 校對規則;
2.校對規則(了解):決定當前數據庫的屬性。
創建一個名稱為mydb1的數據庫。
* create database mydb1;
創建一個使用utf8字符集的mydb2數據庫。
* create database mydb2 character set ‘utf8‘;
創建一個使用utf8字符集,並帶校對規則的mydb3數據庫。
* create database mydb3 character set ‘utf8‘ collate ‘utf8_bin‘;
查看數據庫(重點)
1.show databases; -- 查看所有的數據庫
2.use 數據庫名稱;(*****) -- 使用數據庫
3.show create database 數據庫名稱; -- 查詢數據庫的創建的信息
4.select database(); -- 查詢當前正在使用的數據庫
刪除數據庫(重點)
1.drop database 數據庫名稱; -- 刪除數據庫
查看當前數據庫服務器中的所有數據庫
* show databases;
查看前面創建的mydb2數據庫的定義信息
* show create database mydb2;
刪除前面創建的mydb1數據庫
* drop database mydb1;
修改數據庫
1.語法:alter database 數據庫名稱 character set ‘gbk‘ collate ‘校對規則‘;
1.語法:alter database 數據庫名稱 character set ‘gbk‘ collate ‘校對規則‘;
表結構操作(CURD)
創建表
1.語法:
create table 表名稱(
字段1 類型(長度) 約束,
字段2 類型(長度) 約束,
字段3 類型(長度) 約束
);
2.註意:
* 創建表的時候,後面用小括號,後面分號。
* 編寫字段,字段與字段之間使用逗號,最後一個子段不能使用逗號。
* 如果聲明字符串數據的類型,長度是必須指定的。
* 如果不指定數據的長度,有默認值的。int類型的默認長度是11
3.創建一張表結構(員工表練習)
create table employee(
id int,
name varchar(30),
gender char(5),
birthday date,
entry_date date,
job varchar(50),
salary double,
resume text
);
4.執行SQL語句
* 查詢當前正在使用的數據庫 select database();
* 選擇你要使用的數據庫 use mydb2;
* 執行創建表的SQL語句。
5.使用desc employee;查詢表的信息
+------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| name | varchar(30) | YES | | NULL | |
| gender | char(5) | YES | | NULL | |
| birthday | date | YES | | NULL | |
| entry_date | date | YES | | NULL | |
| job | varchar(50) | YES | | NULL | |
| salary | double | YES | | NULL | |
| resume | text | YES | | NULL | |
+------------+-------------+------+-----+---------+-------+
數據庫的數據類型(重點)
字符串型(重點)
VARCHAR(用的比較多) :長度是可變的。 例子:name varchar(8) ,存入數據hello,存入進去之後,name字段長度自動變成了5。
CHAR :長度是不可變的。 例子:name char(8) 存入數據hello,用空格來補全剩余的位置。
大數據類型(不常用)
BLOB :字節(電影 mp3)
TEXT :字符(文本的內容)
數值型(重點)
TINYINT 、SMALLINT、INT、BIGINT、FLOAT、DOUBLE
邏輯性
BIT
在Java中是true或者false
在數據庫bit類型(1或者0)
日期型(重點)
DATE :只包含日期(年月日)
TIME :只包含時間(時分秒)
DATETIME :包含日期和時間。如果插入數據的時候,字符值為空,字段的值就是空了。
TIMESTAMP :包含日期和時間。如果插入數據的時候,設置字段的值為空,默認獲取當前的系統的時候,把時間保存到字段中。
單表的約束(了解)
1.約束的好處:保證數據的完整性。
2.主鍵約束(重要)代表記錄的唯一標識。
* 關鍵字:primary key 通過該關鍵字聲明某一列為主鍵。
* 唯一 值就不能相同
* 非空 值也不能為空
* 被引用 (和外鍵一起來使用)
3.唯一約束
* 聲明字段值是唯一的。使用關鍵字 unique
4.非空約束
* 聲明字段的值是不能空的。not null
刪除和查看表
1.刪除表語法:drop table 表名;
2.查看標簽
* desc 表名; -- 查詢表的信息
* show tables; -- 查看當前數據庫中所有的標簽
* show create table 表名; -- 查看表的創建的信息
修改表
1.語法
* alter table 表名 add 新列名 類型(長度) 約束; -- 添加列
* alter table 表名 drop 列名; -- 刪除列
* alter table 表名 modify 列名 類型(長度) 約束; -- 修改列的類型或者約束
* alter table 表名 change 舊列名 新列名 類型(長度) 約束; -- 修改列名
* rename table 表名 to 新表名; -- 修改表的名稱
* alter table 表名 character set utf8; -- 修改表的字符集
在上面員工表的基本上增加一個image列。
alter table employee add image varchar(50);
修改job列,使其長度為60。
alter table employee modify job varchar(60);
刪除gender列。
alter table employee drop gender;
表名改為user。
rename table employee to user;
修改表的字符集為utf8
alter table user character set utf8;
列名name修改為username
alter table user change name username varchar(30);
數據的操作(CRUD)(重點)
插入數據(insert)
1.插入數據的語法:
* insert into 表名 (字段1,字段2,字段3) values (值1,值2,值3);
* insert into 表名 values (值1,值2,值3);
2.註意事項
* 插入的數據與字段類型必須是相同的。
* 數據的大小範圍在字段範圍內
* 值與字段一一對應
* 字符串或者日期類型數據需要使用單引號
insert into user values (1,‘meimei‘,‘1956-1-1‘,‘1957-1-1‘,‘HR‘,5000,‘meimeimei‘,‘xx‘);
insert into user values (2,‘小鳳‘,‘1996-1-1‘,‘2013-1-1‘,‘BOSS‘,15000,‘mei‘,‘xx‘);
insert into user values (3,‘聰聰‘,‘1993-11-11‘,‘2015-09-10‘,‘WORKER‘,500.0,‘chou‘,‘yy‘);
insert into user values (4,‘如花‘,‘1994-1-1‘,‘2013-1-1‘,‘BOSS‘,25000,‘mei‘,‘xx‘);
insert into user values (5,‘小蒼‘,‘1991-1-1‘,‘2014-1-1‘,‘BOSS‘,15000,‘mei‘,‘xx‘);
insert into user values (6,‘小澤‘,‘1986-1-1‘,‘2013-1-1‘,‘BOSS‘,15000,‘mei‘,‘xx‘);
| character_set_client | utf8
|
| character_set_connection | utf8
|
| character_set_database | utf8
|
| character_set_filesystem | binary
|
| character_set_results | utf8
|
| character_set_server | utf8
|
| character_set_system | utf8
character_set_client=utf8 -- 客戶端向MySQL服務器端發送內容
character_set_results=utf8 -- MySQL服務器端向客戶端發送內容
MySQL插入中文數據亂碼
1.先把MySQL服務停止。
2.找到MySQL安裝文件的my.ini的配置文件
[client]
port=3306
[mysql]
default-character-set=gbk
3.重啟MySQL服務
修改數據(update)
1.語法:update 表名 set 字段1=值,字段2=值 where 條件; where username = ‘meimei‘;
2.如果沒有where條件語句,默認更新所有的數據。
3.如果有where條件,默認更新符合條件的記錄。
將所有員工薪水修改為5000元。
update user set salary = 5000;
將姓名為’聰聰’的員工薪水修改為3000元。
update user set salary = 3000 where username = ‘聰聰‘;
將姓名為’小鳳’的員工薪水修改為4000元,job改為ccc。
update user set salary = 4000,job = ‘ccc‘ where username = ‘小鳳‘;
將如花的薪水在原有基礎上增加1000元。
update user set salary = salary+1000 where username = ‘如花‘;
刪除數據(delete)
1.語法:delete from 表名 where 條件;
2.如果沒有where條件,默認刪除所有的數據。
3.truncate 表名;刪除表中所有的數據。delete from 表名; 也可以刪除所有數據。
* 區別: truncate先把你整個表刪除掉,默默創建一個空的表(和原來的表結構是一樣的)。
* delete from 表名 一行一行的刪除。(使用它)
* 事物的概念:事物提交和事物回滾。
刪除表中名稱為’聰聰’的記錄。
delete from user where username = ‘聰聰‘;
刪除表中所有記錄。
delete from user;
使用truncate刪除表中記錄。
查詢數據(select)(重點)
基本的select語句
1.語法
* select * from 表名; -- 查詢所有列的記錄
* select 字段1,字段2,字段3 from 表名; -- 查詢字段123的記錄
* DISTINCT -- 去除重復的數據(面試)
select distinct english from stu;
練習
create database day15;
use day15;
create table stu(
id int,
name varchar(30),
math int,
english int,
chinese int
);
insert into stu values (1,‘美美‘,78,93,56);
insert into stu values (2,‘聰聰‘,18,13,16);
insert into stu values (3,‘小鳳‘,98,96,89);
insert into stu values (4,‘如花‘,90,100,46);
insert into stu values (5,‘歐陽鋒‘,74,93,56);
insert into stu values (6,‘吳彥祖‘,37,11,89);
insert into stu values (7,‘聰大‘,88,77,66);
insert into stu values (8,‘聰二‘,55,44,33);
查詢語句中使用運算和別名
在所有學生分數上加10分特長分。
select name,(math+10) m,(english+10) e,(chinese+10) c from stu;
統計每個學生的總分。
select name,(math+english+chinese) 總分 from stu;
使用別名表示學生分數
select name,(math+english+chinese) 總分 from stu;
使用where條件過濾
查詢姓名為聰聰的學生成績
select name,math,chinese from stu where name = ‘聰聰‘;
查詢英語成績大於90分的同學
select name,english from stu where english > 20;
查詢總分大於200分的所有同學
select name,math+english+chinese from stu where (math+english+chinese) > 200;
where子句中出現的運算
1. > < <= >= = <> 大於、小於、大於(小於)等於、不等於 2. in 表示範圍。 * select * from stu where math = 18; 查詢出一條數據 * select * from stu where math in (78,18,99); 3. like 模糊查詢 -- 符合模糊的條件 * select * from stu where name like ‘張_‘; 姓張的名稱(只有兩個)的記錄 * select * from stu where name like ‘張%‘; 姓張的名稱(張飛 張翼德 張是是是冠希)的記錄。 * select * from stu where name like ‘%張‘; 末尾是張(聰聰張 XSDF張) * select * from stu where name like ‘%張%‘; 只要名稱中包含張。 4.is null 判斷某一個字段記錄是否為空 5.and與 or或者 not非 查詢英語分數在 80-90之間的同學。 select * from stu where english >= 10 and english < 19; 查詢數學分數為89,90,91的同學。 select * from stu where math in (89,90,91); 查詢所有姓小的學生成績。 select * from stu where name like ‘小%‘; 查詢數學分>80,語文分>80的同學。 select * from stu where math > 80 or chinese > 80; 總結:select 列名(運算) from 表名(別名) where 條件(運算的符號);
order by 對查詢的結果進行排序
1.排序的語法
* select * from 表名 where 條件 order by 列名 升序/降序;
2.升序和降序
* order by 列名 asc;(升序,默認值)
* order by 列名 desc;(降序)
3.order by 子句必須出現在select語句的末尾。
對數學成績排序後輸出。
select name,math from stu order by math desc;
對總分排序按從高到低的順序輸出
select name,(math+english+chinese) as total from stu order by total desc;
對學生成績按照英語進行降序排序,英語相同學員按照數學降序
select name,english,math from stu order by english desc,math desc;
對姓聰的學生成績排序輸出
select name,(math+english+chinese) as total from stu where name like ‘聰%‘ order by total desc;
聚集函數
1.聚集函數:總計某一列數據總和。一列的個數。一列的平均數。一列中最大值和最小值。
2.聚集函數來操作列的。
3.聚集函數
* count -- 計數
* sum -- 求和
* ifnull 判斷是否為空:語法:ifnul(xxx,0) 如果xxx為null,替換成0
* avg -- 平均值
* max -- 最大值
* min -- 最小值
練習:
統計一個班級共有多少學生?
select count(name) from stu;
統計數學成績大於90的學生有多少個?
select count(math) from stu where math >= 90;
統計總分大於220的人數有多少?
select count(*) from stu where math + english+chinese > 200;
統計一個班級數學總成績?
select sum(math) from stu;
統計一個班級語文、英語、數學各科的總成績
select sum(math),sum(english),sum(chinese) from stu;
統計一個班級語文、英語、數學的成績總和
select sum(ifnull(math,0)+english+chinese) from stu;
select sum(math) + sum(english) + sum(chinese) from stu;
* 編寫一條更新語句:update stu set math = null where id = 2;
統計一個班級語文成績平均分
mysql數據庫相關基礎知識01