MySQL-day01(數據庫、表及表數據、SQL語句)下

第1章 SQL語句
數據庫是不認識JAVA語言的,可是咱們一樣要與數據庫交互,這時須要使用到數據庫認識的語言SQL語句,它是數據庫的代碼。
結構化查詢語言(Structured Query Language)簡稱SQL,是一種數據庫查詢和程序設計語言,用於存取數據以及查詢、更新和管理關係數據庫系統。
建立數據庫、建立數據表、向數據表中添加一條條數據信息均須要使用SQL語句。
1.1 SQL語句
l SQL分類:
n 數據定義語言:簡稱DDL(Data Definition Language),用來定義數據庫對象:數據庫,表,列等。關鍵字:create,alter,drop等
n 數據操做語言:簡稱DML(Data Manipulation Language),用來對數據庫中表的記錄進行更新。關鍵字:insert,delete,update等
n 數據控制語言:簡稱DCL(Data Control Language),用來定義數據庫的訪問權限和安全級別,及建立用戶。
n 數據查詢語言:簡稱DQL(Data Query Language),用來查詢數據庫中表的記錄。關鍵字:select,from,where等
1.2 SQL通用語法
l SQL語句能夠單行或多行書寫,以分號結尾
l 可以使用空格和縮進來加強語句的可讀性
l MySQL數據庫的SQL語句不區分大小寫,建議使用大寫,例如:SELECT * FROM user。
l 一樣可使用/*/的方式完成註釋
l MySQL中的咱們常使用的數據類型以下
MySQL-day01(數據庫、表及表數據、SQL語句)下
詳細的數據類型以下(不建議詳細閱讀!)
MySQL-day01(數據庫、表及表數據、SQL語句)下
MySQL-day01(數據庫、表及表數據、SQL語句)下
1.3 數據庫操做:database
l 建立數據庫
格式:
   
create database 數據庫名;
    * create database 數據庫名 character set 字符集;
        例如:
#建立數據庫 數據庫中數據的編碼採用的是安裝數據庫時指定的默認編碼 utf8
CREATE DATABASE day21_1;
#建立數據庫 並指定數據庫中數據的編碼
CREATE DATABASE day21_2 CHARACTER SET utf8;
MySQL-day01(數據庫、表及表數據、SQL語句)下
l 查看數據庫
查看數據庫MySQL服務器中的全部的數據庫:
show databases;
查看某個數據庫的定義的信息:
show create database 數據庫名;
例如:
show create database day21_1;
l 刪除數據庫
drop database 數據庫名稱;
例如:
drop database day21_2;
l 其餘的數據庫操做命令
切換數據庫:
use 數據庫名;
例如:
use day21_1;
l 查看正在使用的數據庫:
select database();
1.4 表結構相關語句1.4.1 建立表
l 格式:
create table 表名(
   字段名 類型(長度) 約束,
   字段名 類型(長度) 約束
);
例如:
###建立分類表
CREATE TABLE sort (
  sid INT, #分類ID
  sname VARCHAR(100) #分類名稱
);
1.4.2 主鍵約束
主鍵是用於標識當前記錄的字段。它的特色是非空,惟一。在開發中通常狀況下主鍵是不具有任何含義,只是用於標識當前記錄。
格式:
l 1.在建立表時建立主鍵,在字段後面加上  primary key.
create table tablename(        
id int primary key,
.......
)
        
l 2. 在建立表時建立主鍵,在表建立的最後來指定主鍵        
create table tablename(                                                
id int,
.......,
primary key(id)
)
l 3.刪除主鍵:alter table 表名 drop primary key;
alter table sort drop primary key;
l 4.主鍵自動增加:通常主鍵是自增加的字段,不須要指定。
實現添加自增加語句,主鍵字段後加auto_increment(只適用MySQL)
例如:
###建立分類表
CREATE TABLE sort (
  sid INT PRIMARY KEY auto_increment, #分類ID
  sname VARCHAR(100) #分類名稱
);
MySQL-day01(數據庫、表及表數據、SQL語句)下
其餘約束:其餘約束還有如外鍵、惟1、非空等,會在就業班詳細介紹。
1.4.3 查看錶
l 查看數據庫中的全部表:
格式:show tables;
l 查看錶結構:
格式:desc 表名;
例如:desc sort;
1.4.4 刪除表
l 格式:drop table 表名;
例如:drop table sort;
1.4.5 修改表結構格式:
l alter table 表名 add 列名 類型(長度) 約束;        
做用:修改表添加列.
例如:
#1,爲分類表添加一個新的字段爲 分類描述 varchar(20)
ALTER TABLE sort ADD sdesc VARCHAR(20);
l alter table 表名 modify 列名 類型(長度) 約束;
做用:修改表修改列的類型長度及約束.
例如:
#2, 爲分類表的分類名稱字段進行修改,類型varchar(50) 添加約束 not null
ALTER TABLE sort MODIFY sname VARCHAR(50) NOT NULL;
l alter table 表名 change 舊列名 新列名 類型(長度) 約束;
做用:修改表修改列名.
例如:
#3, 爲分類表的分類名稱字段進行更換 更換爲 snamesname varchar(30)
ALTER TABLE sort CHANGE sname snamename VARCHAR(30);
l alter table 表名 drop 列名;        
做用:修改表刪除列.
例如:
#4, 刪除分類表中snamename這列
ALTER TABLE sort DROP snamename;
l rename table 表名 to 新表名;
做用:修改表名
例如:
#5, 爲分類表sort 更名成 category
RENAME TABLE sort TO category;
l alter table 表名 character set 字符集;
做用:修改表的字符集
例如:
#6, 爲分類表 category 的編碼表進行修改,修改爲 gbk
ALTER TABLE category CHARACTER SET gbk;
1.4.6 插入表記錄:
l 語法:
insert into 表 (列名1,列名2,列名3..) values  (值1,值2,值3..); -- 向表中插入某些列
insert into 表 values (值1,值2,值3..); --向表中插入全部列
l 注意:
插入的數據應與字段的數據類型相同
數據的大小應該在列的長度範圍內
在values中列出的數據位置必須與被加入列的排列位置相對應。
除了數值類型外,其它的字段類型的值必須使用引號引發。
若是要插入空值,能夠不寫字段,或者插入 null。               
對於自動增加的列在操做時,直接插入null值便可。
l 例如:
INSERT INTO sort(sid,sname) VALUES('s001', '電器');
INSERT INTO sort(sid,sname) VALUES('s002', '服飾');
INSERT INTO sort VALUES('s003', '化妝品');
INSERT INTO sort VALUES('s004','書籍');
MySQL-day01(數據庫、表及表數據、SQL語句)下
1.4.7 更新表記錄:
用來修改指定條件的數據,將知足條件的記錄指定列修改成指定值
l 語法:
update 表名 set 字段名=值,字段名=值;
update 表名 set 字段名=值,字段名=值 where 條件;
l 注意:
u 列名的類型與修改的值要一致.
u 修改值得時候不能超過最大長度.
u 值若是是字符串或者日期須要加’’.
例如:
#1,將指定的sname字段中的值 修改爲 日用品
UPDATE sort SET sname='日用品';
#2, 將sid爲s002的記錄中的sname改爲 日用品
UPDATE sort SET sname='日用品' WHERE sid='s002';
UPDATE sort SET sname='日用品' WHERE sid='s003';
1.4.8 刪除記錄:delete
l 語法:
delete from 表名 [where 條件];
或者
truncate table 表名;
l 面試題:
刪除表中全部記錄使用delete from 表名; 仍是用truncate table 表名;
刪除方式:delete 一條一條刪除,不清空auto_increment記錄數。
truncate 直接將表刪除,從新建表,auto_increment將置爲零,重新開始。
例如:
DELETE FROM sort WHERE sname='日用品';
#表數據清空
DELETE FROM sort;
1.5 DOS操做數據亂碼解決
咱們在dos命令行操做中文時,會報錯
insert into user(username,password) values(‘張三’,’123’);               
ERROR 1366 (HY000): Incorrect string value: '\xD5\xC5\xC8\xFD' for column 'username' at row 1
緣由:由於mysql的客戶端編碼的問題咱們的是utf8,而系統的cmd窗口編碼是gbk
        解決方案(臨時解決方案):修改mysql客戶端編碼。
show variables like 'character%'; 查看全部mysql的編碼
MySQL-day01(數據庫、表及表數據、SQL語句)下
在圖中與客戶端有關的編碼設置:
client connetion result 和客戶端相關
database server system 和服務器端相關
l 將客戶端編碼修改成gbk.
set character_set_results=gbk; / set names gbk;
以上操做,只針對當前窗口有效果,若是關閉了服務器便失效。若是想要永久修改,經過如下方式:
l 在mysql安裝目錄下有my.ini文件
default-character-set=gbk 客戶端編碼設置                                                
character-set-server=utf8 服務器端編碼設置
注意:修改完成配置文件,重啓服務
第2章 SQL查詢語句
查詢語句,在開發中使用的次數最多,此處使用「zhangwu」 帳務表。
l 建立帳務表:
CREATE TABLE zhangwu (
  id INT PRIMARY KEY AUTO_INCREMENT, -- 帳務ID
  name VARCHAR(200), -- 帳務名稱
  money DOUBLE, -- 金額
);
l 插入表記錄:
INSERT  INTO zhangwu(id,name,money) VALUES (1,'吃飯支出',247);
INSERT  INTO zhangwu(id,name,money) VALUES (2,'工資收入',12345);
INSERT  INTO zhangwu(id,name,money) VALUES (3,'服裝支出',1000);
INSERT  INTO zhangwu(id,name,money) VALUES (4,'吃飯支出',325);
INSERT  INTO zhangwu(id,name,money) VALUES (5,'股票收入',8000);
INSERT  INTO zhangwu(id,name,money) VALUES (6,打麻將支出,8000);
INSERT  INTO zhangwu(id,name,money) VALUES (7,null,5000);
2.1 查詢的語法:
l 查詢指定字段信息
select 字段1,字段2,...from 表名;
例如:
select id,name from zhangwu;
l 查詢表中全部字段
select from 表名;
        例如:
select
from zhangwu;
        注意:使用""在練習、學習過程當中可使用,在實際開發中,不推薦使用。緣由,要查詢的字段信息不明確,若字段數量不少,會致使查詢速度很慢。
l distinct用於去除重複記錄
select distinct 字段 from 表名;                        
例如:
select distinct money from zhangwu;
l 別名查詢,使用的as關鍵字,as能夠省略的.
別名能夠給表中的字段,表設置別名。 當查詢語句複雜時,使用別名能夠極大的簡便操做。
表別名格式:
select
from 表名 as 別名;

select from 表名 別名;
列別名格式:
select 字段名 as 別名 from 表名;

select 字段名 別名 from 表名;
例如
表別名:
        select
from zhangwu as zw;
列別名:
        select money as m from zhangwu;
        或
        select money m from zhangwu;
l 咱們在sql語句的操做中,能夠直接對列進行運算。
例如:將全部帳務的金額+10000元進行顯示.
select pname,price+10000 from product;
2.2 條件查詢
where語句表條件過濾。知足條件操做,不知足不操做,多用於數據的查詢與修改。
格式 :select 字段  from 表名  where 條件;        
while條件的種類以下:
MySQL-day01(數據庫、表及表數據、SQL語句)下
例如:
查詢全部吃飯支出記錄
SELECT FROM zhangwu WHERE name = '吃飯支出';
查詢出金額大於1000的信息
SELECT
FROM zhangwu WHERE money >1000;
查詢出金額在2000-5000之間的帳務信息
SELECT FROM zhangwu WHERE money >=2000 AND money <=5000;

SELECT
FROM zhangwu WHERE money BETWEEN 2000 AND 5000;
查詢出金額是1000或5000或3500的商品信息
SELECT FROM zhangwu WHERE money =1000 OR money =5000 OR money =3500;

SELECT
FROM zhangwu WHERE money IN(1000,5000,3500);
查詢出帳務名稱包含」支出」的帳務信息。
SELECT FROM zhangwu WHERE name LIKE "%支出%";
查詢出帳務名稱中是無五個字的帳務信息
SELECT
FROM gjpledger WHERE ldesc LIKE "____"; -- 五個下劃線_
查詢出帳務名稱不爲null帳務信息
SELECT FROM zhangwu WHERE name IS NOT NULL;
SELECT
FROM zhangwu WHERE NOT (name IS NULL);mysql

相關文章
相關標籤/搜索