目錄

  • MySQL基本操作
  • 1.登陸退出MySQL數據庫
  • 2.創建用户連接遠程數據庫
  • 3.本地管理員用户密碼忘記了
  • 4.操作數據庫(操作文件夾)
  • 5.操作數據表(操作文件)
  • 6.操作記錄(操作表內表格數據)
  • 7.數據類型

MySQL基本操作

語義檢查:判斷SQL語句的類型

  • DDL:數據定義語言
  • DCL:數據控制語言
  • DML:數據操作語言
  • DQL:數據查詢語言

1.登陸退出MySQL數據庫

# (1) 登陸
    mysql -u用户名 -p -h ip地址
    root用户登陸 : 
        mysql -uroot -p
    select user() #查詢當前登陸用户
    select now()  #查詢時間
    
# (2) 設置密碼
    set password = "123"
    set password = "" 	--去除密碼
        
# (3) 退出
\q 或者 exit

2.創建用户連接遠程數據庫

遠程數據庫IP地址: 192.168.138.133
# 給具體IP下設置一個賬號,用來連接遠程數據庫
"""
create user 用户名@"192.168.138.1"/"192.168.138.%"/"%" identified by "密碼"

用户名@'%'	所有地址
用户名@'10.0.0.5%'	只允許IP地址末尾51~59的連接
用户名@'localhost'	只允許本地連接
"""
# 創建用户
mysql>  create user lianxi@"192.168.138.1" identified by "111"
# 查看所有用户
mysql> select user,host from mysql.user;
# 修改用户
mysql> alter user lianxi@'localhost' identified by '123';
# 刪除用户
mysql> drop user zhangkai@'localhost';


# 連接遠程數據庫
    mysql -u lianxi -p -h 192.168.138.133

# 查詢當前用户有什麼權限,for 後面怎麼創建的怎麼查詢
    show grants for "lianxi"@"192.168.138.1"

# 在遠程數據庫給用户添加執行權限
"""
語法:   
    grant 權限 on 數據庫名.表名 to "用户名"@"IP地址" identified by "密碼"
    如果不更改密碼,後面的 [ identified by "密碼" ] 可不加
    "用户名"@"IP地址" : 
常用權限:
    select 查詢權限
    insert 添加權限
    update 修改權限
    drop 刪除權限
    all       所有權限
    *         所有數據庫,所有表
"""
# 授予查詢,添加權限
    grant select,insert on *.* to "lianxi"@"192.168.138.1";
# 授予所有權限
    grant all on *.* to "lianxi"@"192.168.138.1";

# 移除權限
    revoke select on *.* from "lianxi"@"192.168.138.1";
# 移除所有權限
    revoke all on *.* from "lianxi"@"192.168.138.1";

3.本地管理員用户密碼忘記了

解決思路是:

  1. 關閉MySQL服務
  2. mysqld_safe模式啓動,即關閉MySQL的用户密碼驗證模塊,也就是不加載授權表,然後禁止遠程連接,僅能通過本地socket鏈接
  3. 無密碼登登錄到MySQL
  4. 修改密碼
  5. 重啓MySQL
# 啓動mysql:
方式二:sudo service mysql start
# 停止mysql:
方式二:sudo service mysql stop

# 停止mysql - 如果systemctl命令不好使,沒有配置,使用上邊命令
[root@cs mysql]# systemctl stop mysqld
# 啓動安全模式,不加載授權表,然後禁止遠程連接,&是後台執行
[root@cs mysql]# mysqld_safe --skip-grant-tables --skip-networking &
# 進入mysql,無用户無密碼
[root@cs mysql]# mysql
# 修改密碼前,先加載授權表
mysql> flush privileges;
# 修改root用户密碼
mysql> alter user root@'localhost' identified by '123';
mysql> exit;

# 殺死安全模式進程
[root@cs mysql]# pkill mysqld
# 啓動mysql
[root@cs mysql]# systemctl start mysqld

4.操作數據庫(操作文件夾)

MySQL自帶的數據庫

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+

各庫解釋如下:

  • information_schema,虛擬庫,不佔用磁盤空間,存儲的是數據庫啓動後的一些參數,如用户表信息、列信息、權限信息、字符信息等。
  • performance_schema, MySQL 5.5開始新增一個數據庫,主要用於收集數據庫服務器性能參數,記錄處理查詢請求時發生的各種事件、鎖等現象 。
  • mysql,授權庫,主要存儲系統用户的權限信息。
  • sys庫所有的數據源來自performance_schema,目標是把performance_schema的把複雜度降低,讓DBA能更好的閲讀這個庫裏的內容。讓DBA更快的瞭解數據庫的運行情況。
  • test,MySQL數據庫系統自動創建的測試數據庫。test庫在MySQL中特殊存在,一般部署完mysql後應當刪除該庫,並規定不能創建以testtest_字符開頭的數據庫。因為在MySQL中,test庫對任意用户都有管理員權限,
"""
查看新建數據庫位置:
Linux:
    sudo find / -name db100  #/var/lib/mysql
    sudo su root  切換到root用户
    cd /var/lib/mysql
Windows:
    D:\MySQL5.7\mysql-5.7.25-winx64\data => 看到數據庫文件夾
"""
# create database & create schema -- schema相當於database
# (1) 增 create  ->創建數據庫  
	# 編碼集一般:utf8,utf8mb4(比utf8多編譯了複雜的中文等),gbk
    mysql> show charset;  # 查看字符集
    
    create database 數據庫名 charset 編碼集; 

    create database lianxi charset utf8;  # 創建名為lianxi 的數據庫

# (2) 查 show
    show databases; # 查看所有數據庫
    show create database lianxi ; # 查看建庫語句

# (3) 改 alter
    alter database lianxi charset gbk ; # 修改數據庫編碼集

# (4) 刪 drop 
    drop database lianxi  # 刪除數據庫

5.操作數據表(操作文件)

# 1.操作數據表(操作文件)
    use lianxi # 選擇數據庫
    select database() # 查詢當前庫
    
# (1) 增 create 
    創建數據表語法 :
        create table 表名(字段1 類型1,字段2 類型2,....)
    #創建t1表
    create table t1(id int , name char(12),sex varchar(10)) 

# (2) 查 
    show tables; # 查看所有數據表
    show cteat table t1 ; #查看建表語句,查看錶結構
    show cteat table t1 \G; #查看建表語句,查看錶結構,垂直顯示
    desc t1 # 查看錶字段信息

# (3) 改  alter
    # modify 更改字段類型
    alter table t1 modify id char(10); #把id字段改成字符串類型
    # change 更改字段名稱+類型
    alter table t1 change name sex int; #把name字段改sex,類型改int型
    # add 添加字段
    alter table t1 add age int ;
    # drop 刪除字段(刪除表中列) 不能刪除主鍵字段
    alter table t1 drop age;
    # rename 更改表名
    alter table t1 rename t2 # 把表名t1改成t2
   
# (4) 刪 drop
    drop table t1 ; #刪除t1數據表
    
# 2.複製表相關的操作:
# (1)複製一份一摸一樣的表t3,表結構和t1一樣,不復制記錄
	create table t3 like t1;
# (2)創建一個表,複製另一張表的指定字段和記錄
    create table t4(
    name char(10),
    sex char(10),
    primary key(name,sex) --注意,key不會複製: 主鍵、外鍵和索引,所以這裏需要自己建立主鍵
    )
    select name,sex from t1;
# (3)創建一個表,複製另一張表的指定字段和記錄,但是創建的表字段又不想跟被複製表字段一致
    create table t5(
    user char(10),
    num char(10),
    primary key(user,num) 
    )
    select name as user,sex as num from t1; -- 給字段起別名

6.操作記錄(操作表內表格數據)

# (1) 增 insert
    # 一次插入一條數據
    insert into t1 (id,name) values (1,"熊大")
    # 一次插入多條數據
    insert into t1 (id , name) values (2,"熊二"),(3,"光頭強"),...
    # 不指定字段插入(按字段順序插入)
    insert into t1 values (4,"舒暢")
    # 可以具體指定個別字段插入(其他字段自動填充null)
    insert into t1 (name) values ("沈騰")
    
# (2)查 select
    select * from t1; # 查詢表中所有數據
    select id,name from t1 ; #查詢指定字段數據
    
# (3) 改 update 
語法:
    # update 表名 set 需要修改的字段=值 where 參考字段>=<值
    update t1 set name = "郭麒麟" where id = 1 #id=1那行的name改成郭麒麟
    
# (4) 刪除 delete (刪除表中行)
語法:
    # delete from 表名 where 條件
    delete from t1 where id = 1 # 刪除id = 1 那行
    delete from t1  #刪除表中所有數據,但不能重置自增字段
    truncate table t1 #重置表(刪除所有數據 + 重置自增字段)

7.數據類型

# (1) 整型
小整型 :tinyint  1個字節 有符號: [-128 ~ 127]  無符號 [0 ~ 255] unsigned
大整型 : int       4個字節 有符號: [-21億 ~ 21個億左右] 無符號 [0 ~ 42億]unsigned

# (2) 浮點型
# float(255,30)  30代表小數保留30個,整數+小數位數總長= 255
float       #單精度  默認保留5位小數
double   # 雙精度  默認10多位
decimal  #金錢類型 默認保留整數

# (3) 字符串
char (11)       #定長:固定開闢11個字符長度空間(身份證,手機號,銀行卡)
varchar(11)    #變長:動態最多開闢11個字符長度的空間( 評論,個性簽名,廣告 )
text                #文本類型: (畢業論文,文章,長篇小説)

select concat(id,name) from t1;  # 字段的拼接

# (4) 枚舉和集合
enum  枚舉 : 從列出來的數據當中選1個   (性別)
set       集合 : 從列出來的數據當中選多個  (愛好) 自動去重
    create table t2(
	sex enum("男性","女性") ,
	hobby set("大保健","吃藥","吃大腰子")	
	);
    insert into t2 values ("男性","大保健,大保健,大保健") # 集合自動去重,只能添加一個大保健
    
# (5) 時間類型 
date  YYYY-MM-DD  年月日 (出生日期,結婚日期,春運,項目啓動時間)
time  HH:MM:SS    時分秒 (長跑記錄,體育競賽)
year  YYYY        年份   (化石,紅酒年份)
datetime YYYY-MM-DD HH:MM:SS 年月日 時分秒 (訂單流水,日誌時間)
	create table t1(d date , t time , y year , dt datetime); #創建表
    
	insert into t1 values("2021-01-07" , "09:22:40" , "2021" , "2021-01-07 09:22:40");
    insert into t2 values (20200101,152030,2020,20200101153030); 
	insert into t1 values(now(),now(),now(),now()) #自動添加當前時間

timestamp YYYYMMDDHHMMSS (時間戳)  自動更新時間 (系統自動寫入,不需要手動更新)  (用來記錄修改的時間)
	create table t2(dt datetime , ts timestamp); #創建表
	
	insert into t2 values(null , null); # 插入null時,自動更新時間
    insert into t2 values(20400107092930 , 20300107092930);
	insert into t2 values(20400107092930 , 20400107092930); error 自動更新時間戳超過2038年