目錄
- 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.本地管理員用户密碼忘記了
解決思路是:
- 關閉MySQL服務
mysqld_safe模式啓動,即關閉MySQL的用户密碼驗證模塊,也就是不加載授權表,然後禁止遠程連接,僅能通過本地socket鏈接- 無密碼登登錄到MySQL
- 修改密碼
- 重啓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後應當刪除該庫,並規定不能創建以test和test_字符開頭的數據庫。因為在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年
本文章為轉載內容,我們尊重原作者對文章享有的著作權。如有內容錯誤或侵權問題,歡迎原作者聯繫我們進行內容更正或刪除文章。