本文目錄一覽:
- 1、mysql 更改數據庫字符編碼的方法
- 2、怎樣在mysql裡面修改數據庫名稱?
- 3、如何修改MySQL數據庫名稱
- 4、mysql數據庫中的collation如何修改?
- 5、MySQL(DML數據操作語言,添加/刪除/修改數據庫數據)
mysql 更改數據庫字符編碼的方法
mysql如何更改數據庫字符編碼?藉助客戶端工具很容易就可以更改了,下面來看一下。
打開navicat客戶端工具,在左邊找到要更改的數據庫。
右鍵點擊這個數據庫,在菜單上點擊數據庫屬性選項。
在彈出的屬性窗口上,點擊默認字符集下的下拉框。
在彈出的下拉選項里,點擊選中要使用的字符集就行了,比如選擇常用的utf8字符集,點擊ok按鈕就行了。
怎樣在mysql裡面修改數據庫名稱?
被取消的命令MySQL 之前提供了一個 rename database db_old to db_new 的命令來直接對數據庫改名,可能由於實現的功能不完備(比如,這條命令可能是一個超大的事務,或者是由於之前的表很多還是 MyISAM 等),後來的版本直接取消了這條命令。更改數據庫名大致上有以下幾種方案:
一、mysqldump 導入導出要說最簡單的方法,就是直接用 mysqldump 工具,在舊庫導出再往新庫導入(最原始、最慢、最容易想到)的方法:舊庫 yttdb_old 導出(包含的對象:表、視圖、觸發器、事件、存儲過程、存儲函數)
二、改整庫的表名利用 MySQL 更改表名的方法來批量把舊庫的所有表依次遍歷,改名為新庫的表。這種方法比第一種要快很多倍,但是沒有第一步操作起來那麼順滑,不能一步到位。比如,要把數據庫 yttdb_old 改名為 yttdb_new,如果數據庫 yttdb_old 里只有磁盤表,那很簡單,直接改名即可。或者寫個腳本來批量改,非常簡單。但是一般舊庫里不只有磁盤表,還包含其他各種對象。這時候可以先考慮把舊庫的各種對象導出來,完了在逐一改完表名後導進去。
三、歷史方案其實在 MySQL 早期還有一種方法。假設 MySQL 部署好了後,所有的 binlog 都有備份,並且二進制日誌格式還是 statement 的話,那就可以簡單搭建一台從機,讓它慢慢追主機到新的庫名,等確切要更改舊庫的時候,再直接晉陞從機為主機即可。這裡只需要從機配置一個參數來把舊庫指向為新庫:replicate-rewrite-db=yttdb_old-yttdb_new不過這種局限性很大,不具備標準化,不推薦。
總結其實針對 MySQL 本身改庫名,大致就這麼幾種方法:
如果數據量小,推薦第一種;
數據量大,則推薦第二種;
數據量巨大,那就非 MySQL 本身能解決的了。
可通過部署第三方 ETL 工具,通過解析 MySQL 二進制日誌或其他的方式來把舊庫數據直接讀取到新庫達到改名的目的等等。
如何修改MySQL數據庫名稱
修改MySQL數據庫名稱的方法如下:
1.語句修改法:
RENAME DATABASE db_name TO new_db_name
這個語法在mysql 5.1.7中被添加進來,到了5.1.23又去掉了。
2.如果所有表都是MyISAM類型的話,可以改文件夾的名字
把data目錄中的db_name目錄重命名為new_db_name
3.重命名所有的表
代碼如下:
4. mysqldump導出數據再導入
代碼如下:
5.使用shell腳本重命名所有的表
代碼如下:
mysql數據庫中的collation如何修改?
mysql中怎麼修改collation
【問題報錯】
在數據庫插入數據時,varchar 類型的字段插入中文數據時報錯。
報錯原文:
【原因分析】
通過 show full columns from user_bean;語句查看字段的collation屬性,發現字段的collation屬性值是 latin1_swedish_ci ,說明字段默認為英語。未對漢語進行設置,所以當輸入漢語時,mysql會報錯為“字符串的值不正確”。
【解決方法】
1、編輯mysql的配置文件 /etc/my.cnf,vi /etc/my.cnf
在 [mysqld] 下面加入兩行補充
2、重啟Mysql服務 systemctl restart mysqld
向數據庫插入含中文的數據,成功!
注意:上面步驟可以解決以後創建表時字段的collation屬性的問題,但前面已經創建的表字段的collation屬性值並不會發生變化。
如果要改變之前已經創建好的表,怎麼辦?
方法1:對原來的表進行修改,可以通過類似語句
alter table user_bean change address address varchar(255) character set utf8 collate utf8_general_ci not null;
方法2:刪除原來的表,重新再建。
【命令總結】
MySQL(DML數據操作語言,添加/刪除/修改數據庫數據)
插入數據
insert into 表名(字段) values(‘數據’);
insert into 表名1(name,age) select name,age from 表2; #表2 數據信息複製到表1
修改數據
update 表名 set ‘字段’=’數據’; #修改數據
delect from 表名 where 字段=值; #刪除數據
truncate table 表名; #清空所有數據 且無法恢復
DQL (數據查詢語言,用來查詢數據)
select 要查詢字段 from 表名 [where 滿足條件];
[group by 分組依據]
[order by 排序依據]
[limit 限定輸出結果]
select * from 表名; #查詢 表 所有數據
select 字段 字段 from 表名; #查詢指定字段數據
select st.name,st.age,th.name,th.age from st,th; #查詢一個或多個 表中的數據
SELECT 字段名 FROM 表名 WHERE 條件1 OR 條件2 […OR 條件n];
例:SELECT * FROM students WHERE age20 OR education!=’大專’; #查詢年齡小於20或 者學歷不等於大專的學生信息
SELECT 字段名 FROM 表名 WHERE 條件1 AND 條件2 […AND 條件n];
例:SELECT * FROM students WHERE age22 AND education=’大專’; # 查詢年齡大於22 且學歷為大專的學生信息
select 字段 from 表名 where age in (12,17,23); #數據在指定 數據 裡面
select 字段 from 表名 where age between 23 and 28; #數據在23-28 之間
select * from 表名 order by 字段名; #排序,升序
select 字段 from 表名 order by desc; # 字段降序
select 字段1,字段2…… from 表名 group by 分組依據字段; #每個字段只顯示一條
例:SELECT id,sname,age,phone,place,GROUP_CONCAT(age,place) FROM students GROUP BY age,place; #查詢學生信息,根據age,place分組並顯示每一組的記 錄
select distinct 字段 from 表名; #去除結果重複行
例:SELECT DISTINCT age FROM students; # 查詢學生的年齡段情況
selcet 字段1,字段2,group_concat(分組依賴字段名) from 表名 group by 分組依賴字段名; #查詢每個組中記錄數量,顯示出來(使用關鍵字GROUP BY與GROUP_CONCAT()函數一起使用,可以將每個組中的記錄數量都顯 示出來)
例:selcet id,sname,age,phone,GROUP_CONCAT(age) FROM students GROUP BY age; # 查詢學生id,姓名,年齡,電話,根據age分組並顯示每一組的記錄
SELECT 字段名 FROM 表名 [其他條件] LIMIT int,int; 參數1是開始讀取的第一條記錄的 編號,參數2是要查詢記錄的個數
例:SELECT * FROM students ORDER BY age LIMIT 0,5; # 查詢學生信息,根據age 排序從第0位開始顯示,只顯示5條
select 字段名 from 表名where字段名 regexp ‘匹配方式’;
(^匹配以特定字符或 字符串開頭的記錄,
$匹配以特定字符或 字符串結尾的記錄
[^字符集 合]匹配除“字符集合”以 外的任意一個字符
S1|S2|S3匹配S1 S2 S3中 的任意一個字符串
字符串{N }匹配字符串出現N次
字符串 {M,N}匹配字符串出現至 少M次,最多N次)
聚合函數查詢
select count(字段名) from 表名; #對於除”*”以外的任何參數,返回所選擇集合中非NULL值的行的數目;對於參數“*”,返回選擇集 合中所有行的數據,包含NULL值的行
例:SELECT COUNT(*) FROM students;
select sum(字段名) from 表名; #表中某個字段取值的總和
select avg(字段名) from 表名; #表中某個字段取值的平均值
select max(字段名) from 表名; #表中某個字段取值的最大值
select min(字段名) from 表名; #表中某個字段取值的最小值
連接查詢
a.內連接:列出數據表中與連接條件相匹配的數據行,組合成新記錄【只有滿足條件的記錄才出現在查詢結 果】 內連接的最常見的例子是相等連接,也就是連接後的表中的某個字段與每個表中的都相同
select 字段名1,字段名2 from 表名1 inner join 表名2 where 連接條件;
例:select s.name,d.dname from staff s inner join department d WHERE s.dpid = d.id; # 連接員工表的dpid字段和部門表的id字段,並查詢員工姓名和部門名稱
b.外連接:與內連接不同,外連接是指使用OUTER JOIN關鍵字將兩個表連接起來。外連接生成的結果集不僅 包含符合連接條件的行數據 ,而且還包含左表(左外連接時的表) 右表(右外連接時的表)或 兩邊連接表(全外連接時的表)中所有的數據行。
select 字段名稱 from 表名1 LEFT|RIGHT join 表名2 on 表名1.字段名1 = 表名2.字段名2;
例:select s.name,d.dname FROM staff s LEFT JOIN department d ON s.dpid = d.id; #連接員工表的dpid字段和部門表的id字段,並查詢員工姓名和部門名稱,如果右表中沒有對應的 連接數據,會自動添加NULL值
例:SELECT s.name,d.dname FROM staff s RIGHT JOIN department d ON s.dpid = d.id; # 連接員工表的dpid字段和部門表的id字段,並查詢員工姓名和部門名稱,如果左表中沒有對應 的連接數據,會自動添加NULL值
例:SELECT 字段名1,字段名2 FROM 表名1,表名2 WHERE 連接條件 AND 限制條件; 例:SELECT s.name,d.dname FROM staff s,department d WHERE s.dpid = d.id AND s.dpid1; # 查詢員工姓名和部門名稱,條件是員工表的dpid字段與部門表中的id字段相等,並且dpid大於1
合併查詢結果
select 字段名 from 表名 UNION select 字段名 from 表名; #關鍵字UNION是將所 有的查詢結果合併到一起,並且去除相同記錄
例:SELECT dpid FROM staff UNION SELECT id FROM department; # 查詢員工表dpid與部門表id,如果有重複數據,只顯示一次
select 字段名 drom 表名 UNION ALL select 字段名from表名; #關鍵字UNION ALL 則只是簡單地將結果合併到一 起
例:SELECT dpid FROM staff UNION ALL SELECT id FROM department; # 查詢員工表dpid與部門表id,全部顯示
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/275800.html