MySQL(三)

mysql接口程序使用及SQL入門


mysql接口程序:

mysql -uroot -poldboy123 -e "show variables like '%server_id%'"mysql


mysql>sql

 

mysql:數據庫

用於數據庫鏈接管理
將用戶SQL 語句發送到服務器服務器

mysqladmin:
命令行管理工具函數

mysqldump:
備份數據庫和表的內容工具

一、接口自帶的功能

一、\h 或 help 或 ?
二、\G    以鍵值對的方式顯示結果
三、\T 或 tee    記錄命令行的輸入輸出 用法   tee  /var/log/test.log 統計到指定的文件裏
四、\c 或 CTRL+c     不執行命令
五、\s 或 status
六、\. 或 source         
  執行外部SQL腳本:二進制日誌截取、備份出來的SQL腳本
七、\u 或use  進入某個數據庫測試

 

二、服務器端命令(SQL)

(1)SQL:結構化的查詢語言,mysql接口程序只負責接收SQL,傳送給SQL層ui

(2)SQL種類: spa

  DDL:數據庫(對象)定義語言
  DCL:數據庫控制語言(grant revoke)
  DML:數據(行)操做語言(update delete insert)
  DQL: 數據查詢語言(show、select)操作系統

DDL操做:

對象: 庫和庫:

定義什麼?

一、庫名字
二、庫的基本屬性
如何定義?
create database lufei;   建立一個lufei庫
create schema lf;     建立一個lf庫 和datbase同樣
show databases;
create database llf CHARACTER SET utf8 ; 建立一個庫並添加字符集屬性爲utf8
show create database llf;   查看建庫的語句  瞭解到建庫的屬性
drop database llf;                   刪除庫
help create database;            help查詢幫助
   字符集: CHARACTER SET [=] charset_name
   排序規則:COLLATE [=] collation_name

改庫的字符集:
ALTER DATABASE [db_name] CHARACTER SET charset_name COLLATE collation_name
mysql> alter database lf charset utf8mb4;
mysql> show create database lf;


表:
表數據:數據行
表屬性(元數據):表名、列名字、列定義(數據類型、約束、特殊列屬性)、表的索引信息
定義什麼?
定義表的屬性。

use lufei; 切換到lufei這個庫裏
建立:
create table t1 (id int ,name varchar(20));
查詢:
show tables;                查看庫裏的表

show create table t1;   看t1 表的建立命令

desc  t1;                       看列的名字屬性

刪除
drop table t1;
修改:
(1)在表中添加一列
  alter table t1 add age int;
(2)添加多列
  alter table t1 add bridate datetime, add gender enum('M','F');
(3)在指定列後添加一列
  alter table t1 add stu_id int after id;
(4)在表中最前添加一列
  alter table t1 add sid int first;
(5)刪除列
  alter table t1 drop sid;
(6)修改列名
  alter table t1 change name stu_name varchar(20);
(7)修改列屬性
  alter table t1 modify stu_id varchar(20);
(8)修改表名
  rename table t1 to student;
  alter table student rename to stu;
-------------------------------------------------------------

 

DML語句:數據操做語言

insert 

use lufei
create table t1 (id int ,name varchar(20)); 建立一個簡單的表來測試


insert into t1 values(1,'zhang3');           插入數據
select * from t1;                                                       查看
insert into t1 values (2,'li4'),(3,'wang5'),(4,'ma6');   插入多個數據
insert into t1(name) values ('xyz');                          只插入name列的數據 id列默認爲空

select * from  t1;

update


update t1 set name='zhang33' ;          ----會更新表中全部行的name字段,比較危險
update t1 set name='zhang55' where id=1;   ----update在使用時通常都會有where條件去限制。


delete


delete from t1 ;       --刪除表中全部行,比較危險。一行一行刪除表中數據。
delete from t1 where id=2;

DDL

truncate table t1;       ---在物理上刪除表數據,速度比較快。

--------------------------------------------------------------------------------------

DQL:

  select語句:
SELECT USER,PASSWORD ,HOST FROM mysql.user;

-- select 基本查詢 

關鍵詞 select  。。。。。from

DESC world.city
SELECT id ,NAME FROM world.city;    查詢world庫裏city表的 id和name
SELECT * FROM world.`city`;                  * 查詢全部

-- select 條件查詢 where

WHERE條件又叫作過濾條件,它從FROM子句的中間結果中去掉全部條件conditions不爲TRUE(而爲FALSE或者NULL)的行
WHERE子句跟在FROM子句後面
不能在WHERE子句中使用列別名

----一、查詢中國(CHN)全部的城市信息 

 SELECT * FROM world.`city` WHERE countrycode='CHN';

---- 二、查詢中國(CHN)安徽省全部的城市信息。

SELECT * FROM world.`city` 
WHERE countrycode='CHN'
AND
district='anhui';

---- 三、查詢世界上人口數量在10w-20w城市信息

SELECT * FROM world.`city` 
WHERE 
population BETWEEN 100000 AND 200000 ;

---- 四、中國或者日本的全部城市信息    IN  或者的意思

where字句中的IN
SELECT * FROM world.city
WHERE countrycode IN ('CHN','JPN');

---- 五、模糊查詢

SELECT * FROM world.city
WHERE countrycode LIKE 'ch%';

 

 

-- select 排序並限制---- 按照人口數量排序輸出中國的城市信息(ASC\DESC)

SELECT * FROM world.`city` WHERE countrycode='CHN' ORDER BY population ASC;
SELECT * FROM world.`city` WHERE countrycode='CHN' ORDER BY population DESC;

 

---- 按照多列排序人口+省排序

SELECT * FROM world.`city` WHERE countrycode='CHN' 
ORDER BY id DESC ;    按列名進行排序

SELECT * FROM city
ORDER BY 5 DESC ;       按列號

1-10
SELECT * FROM world.`city` WHERE countrycode='CHN' 
ORDER BY 5 DESC LIMIT 20;    LIMT 排序一部分   必定要配合order by 使用

11-20
SELECT * FROM world.`city` WHERE countrycode='CHN' 
ORDER BY 5 DESC LIMIT 10,10 ;

SELECT * FROM world.`city` WHERE countrycode='CHN' 
ORDER BY 5 DESC LIMIT 10 OFFSET 10 ;


--錶鏈接查詢
-- 錶鏈接查詢

DESC city

DESC countrylanguage

 

傳統的鏈接寫法(使用where)

---- 中國全部城市信息+使用語言

SELECT NAME ,countrycode ,population FROM city WHERE countrycode ='CHN'

SELECT countrycode ,LANGUAGE FROM countrylanguage;

 

 

SELECT ci.NAME ,ci.countrycode ,ci.population,cl.language 
FROM 
city AS ci , countrylanguage AS cl    設置別名 簡化表的名字
WHERE ci.countrycode ='CHN' 
AND
ci.CountryCode=cl.CountryCode;


SELECT NAME,ci.countrycode ,cl.language ,ci.population
FROM city ci , countrylanguage cl
WHERE 
ci.countrycode='chn' AND
ci.`CountryCode`=cl.countrycode;


SELECT NAME,countrycode ,LANGUAGE ,population
FROM city NATURAL JOIN countrylanguage 
WHERE population > 10000000
ORDER BY population;

SELECT NAME,countrycode ,LANGUAGE ,population
FROM city JOIN countrylanguage 
USING(countrycode);

 

---- 查詢青島這個城市,所在的國傢俱體叫什麼名字

DESC city
DESC country

SELECT NAME,countrycode FROM city WHERE NAME='qingdao';

SELECT NAME FROM country WHERE CODE='CHN';


-------------------------------- 經常使用方式
SELECT ci.name ,ci.countrycode,ci.population ,co.name
FROM city AS ci 
JOIN 
country AS co
ON ci.countrycode=co.code
AND
ci.name='qingdao';
---------------------------------

group by +聚合函數(avg()、max()、min()、sum())

統計國家人數
SELECT countrycode ,SUM(population) FROM city
WHERE countrycode = 'chn'  不加where條件則查看全部國家的人口總和
GROUP BY countrycode;


union

用來替換 or 、in()

SELECT * FROM world.city
WHERE countrycode IN ('CHN','JPN');
改寫爲:

SELECT * FROM world.city
WHERE countrycode ='CHN'
union
SELECT * FROM world.city
WHERE countrycode ='JPN';

------------------

字符集:

charset:字符集
UTF8
UTF8mb4

gbk


collation:排序規則

a-z ,A-Z 大小寫敏感

aA-zZ 小寫不敏感

 

show charset;    查看字符集
show collation;   查看校對規則

 


數據庫:


服務器端字符集: 

控制的是,存到mysql中時,字符集控制


客戶端字符集

控制的是用戶的輸入及顯示


系統字符集

控制的是系統相關的顯示,和一些依賴於操做系統的應用

 

alter database oldboy CHARACTER SET utf8 collate utf8_general_ci;
alter table t1 CHARACTER SET latin1;

注意:更改字符集時,必定要保證由小往大改,後者必須是前者的嚴格超集。

生產中別隨便改。

 


數據類型及列屬性:

數字類型
字符類型
時間類型

 

 

 


列屬性


create table student(id int not null primary key AUTO_INCREMENT);
create table student1(id int not null primary key AUTO_INCREMENT,name varchar(20))charset utf8;
create table teacher(id int not null ,name varchar(20) not null);
create table teacher1(id int not null ,name varchar(20) not null,beizhu varchar(20) not null default "ok");

primary key 主鍵:非空、惟一
unique:惟一

 

 

獲取元數據:

 


information_schema

元數據


SELECT TABLE_NAME, ENGINE
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'world';

 

SELECT TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE DATA_TYPE = 'set';

 
SELECT CHARACTER_SET_NAME, COLLATION_NAME
FROM INFORMATION_SCHEMA.COLLATIONS
WHERE IS_DEFAULT = 'Yes';

 

SELECT TABLE_SCHEMA, COUNT(*)
FROM INFORMATION_SCHEMA.TABLES
GROUP BY TABLE_SCHEMA;

 

mysqldump -uroot -poldboy123 world country >> /bakcup/world_country.bak.sql

select table_schema ,country from tables where table_schema='world';

------------------------

concat 拼接

select concat("mysqldump -uroot -poldboy123 ",table_schema," ",table_name," 
>>","/backup/",table_schema,"_",table_name,".bak.sql") 
from information_schema.tables where table_schema='world';

 

拼接語句 備份world下的全部表

SELECT CONCAT('CREATE TABLE ', TABLE_SCHEMA, '.',
TABLE_NAME, '_backup LIKE ', TABLE_SCHEMA, '.',
TABLE_NAME, ';') FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = ‘world’;

 

 


-------------------------

show
show
show databases
show create database oldboy
show tables
show create table t1

SOHW databases:列出全部數據庫
SHOW TABLES:列出默認數據庫中的表
SHOW TABLES FROM <database_name>:列出指定數據庫中的表 mysql> show tables from world;
SHOW COLUMNS FROM <table_name>:顯示錶的列結構
SHOW INDEX FROM <table_name>:顯示錶中有關索引和索引列的信息

  mysql> show index from world.city;
SHOW CHARACTER SET:顯示可用的字符集及其默認整理
SHOW COLLATION:顯示每一個字符集的整理
SHOW STATUS:列出當前數據庫狀態
SHOW VARIABLES:列出數據庫中的參數定義值

相關文章
相關標籤/搜索