MySQL日常應用操作記錄

1.知道一個字段名,怎樣查到它在數據庫里的哪張表里?

USE Information_schema;
SELECT TABLE_NAME FROM COLUMNS WHERE COLUMN_NAME='字段名稱';

MySQL中查看庫表字段信息都在information_schemal中,獲取數據字典等信息都要通過這個視圖。

如:

select table_name from columns where column_name='user_id';

2. 如何查看建表語句?

show?create?table?tablename;

要查看tb1表結構的命令:??

show?create?table tb1;?

注意,不用加引號。

?

3.如何查看表結構?

desc?tablename; ??

要查看tb1表結構的命令:??

desc tb1; ?

?

4.如何查看一個表的表結構修改記錄?

MySQL不支持直接查看,只能通過日志文件查看。

Oracle和SQL Server可以。

?

6.Mysql更改列名和數據類型

只修改列的數據類型的方法:
?alter table 表名 modify column 列名 新的列的類型
例如:student表中列sname的類型是char(20),現在要修改為varchar(20),SQL語句如下
alter table student modify column sname varchar(20);

只修改列名,或者同時修改列名和列的數據類型的方法:
?alter table 表名 change column 舊列名 新列名 (原先的類型)新的列類型
例如:student表中列sname的類型是char(20),現在要修改為stuname varchar(20),SQL語句如下
alter table student change column sname stuname varchar(20);

7.This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'的意思是,

這版本的 MySQL 不支持使用 LIMIT 子句的 IN/ALL/ANY/SOME 子查詢,即是支持非 IN/ALL/ANY/SOME 子查詢的 LIMIT 子查詢。

也就是說,這樣的語句是不能正確執行的。?
select * from table where id in (select id from table limit 10)

但是,只要你再來一層就行。。如:?
select * from table where id in (select t.id from (select * from table limit 10)as t)

?

8.使用SQL語句查詢某記錄的前后N條數據?

id是指當前數據tb_id參數

方法一:

string preSql = "select top 1 * from table where tb_id < " + id + " order by tb_id DESC"string nextSql = "select top 1 * from table where tb_id > " + id + " order by tb_id ASC"


方法二:

string preSql = "select * from [table] where tb_id = (select MAX(tb_id) from [table] where tb_id<"+ id + ")";
string nextSql = "select * from [table] where tb_id = (select MIN(tb_id) from [table] where tb_id>"+ id + ")";

將查詢結果union即可。

?

9. 三張表join操作

三張表:A (id,xxx) B(id,xxx) C(id,xxx) 要根據相同的id顯示三張表,做Left Join。
SELECT XXX?
FROM ((A LEFT JOIN B ON A.id = B.id)?
LEFT JOIN C ON A.id = C.id)?
WHERE B.id Is Not Null

From條件后面的括號不能忘了。

A連接B B連接C的實現
select * from A inner join B on A.id=A.id inner join C on B.id=C.id

10.union 與union all 的區別

數據庫中,UNION和UNION ALL都是將兩個結果集合并為一個,但這兩者從使用和效率上來說都有所不同。?

UNION在進行表鏈接后會篩選掉重復的記錄,所以在表鏈接后會對所產生的結果集進行排序運算,刪除重復的記錄再返回結果。實際大部分應用中是不會產生重復的記錄,最常見的是過程表與歷史表UNION。如:?

select * from users1 union select * from user2 

這個SQL在運行時先取出兩個表的結果,再用排序空間進行排序刪除重復的記錄,最后返回結果集,如果表數據量大的話可能會導致用磁盤進行排序。?

而UNION ALL只是簡單的將兩個結果合并后就返回。這樣,如果返回的兩個結果集中有重復的數據,那么返回的結果集就會包含重復的數據了。?
從效率上說,UNION ALL 要比UNION快很多,所以,如果可以確認合并的兩個結果集中不包含重復的數據的話,那么就使用UNION ALL,如下:?

select * from user1 union all select * from user2

?

11.MySQL日常操作

啟動:net start mySql;
進入:mysql -u root -p/mysql -h localhost -u root -p databaseName;
列出數據庫:show databases;
選擇數據庫:use databaseName;
列出表格:show tables;
顯示表格列的屬性:show columns from tableName;
建立數據庫:source fileName.txt;
匹配字符:可以用通配符_代表任何一個字符,%代表任何字符串;
增加一個字段:alter table tabelName add column fieldName dateType;
增加多個字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType;
多行命令輸入:注意不能將單詞斷開;當插入或更改數據時,不能將字段的字符串展開到多行里,否則硬回車將被儲存到數據中;
增加一個管理員帳戶:grant all on *.* to user@localhost identified by "password";
每條語句輸入完畢后要在末尾填加分號';',或者填加'\g'也可以;
查詢時間:select now();
查詢當前用戶:select user();
查詢數據庫版本:select version();
查詢當前使用的數據庫:select database();


(1)刪除student_course數據庫中的students數據表:
rm -f student_course/students.*

(2)備份數據庫:(將數據庫test備份)
mysqldump -u root -p test>c:\test.txt
備份表格:(備份test數據庫下的mytable表格)
mysqldump -u root -p test mytable>c:\test.txt
將備份數據導入到數據庫:(導回test數據庫)
mysql -u root -p test<c:\test.txt

(3)創建臨時表:(建立臨時表zengchao)
create temporary table zengchao(name varchar(10));

(4)創建表是先判斷表是否存在
create table if not exists students(……);

(5)從已經有的表中復制表的結構
create table table2 select * from table1 where 1<>1;

(6)復制表
create table table2 select * from table1;

(7)對表重新命名
alter table table1 rename as table2;

(8)修改列的類型
alter table table1 modify id int unsigned;//修改列id的類型為int unsigned
alter table table1 change id sid int unsigned;//修改列id的名字為sid,而且把屬性修改為int unsigned

(9)創建索引
alter table table1 add index ind_id (id);
create index ind_id on table1 (id);
create unique index ind_id on table1 (id);//建立唯一性索引

(10)刪除索引
drop index idx_id on table1;
alter table table1 drop index ind_id;

(11)聯合字符或者多個列(將列id與":"和列name和"="連接)
select concat(id,':',name,'=') from students;

(12)limit(選出10到20條)<第一個記錄集的編號是0>
select * from students order by id limit 9,10;

(13)MySQL不支持的功能
事務,視圖,外鍵和引用完整性,存儲過程和觸發器

(14)MySQL會使用索引的操作符號
<,<=,>=,>,=,between,in,不帶%或者_開頭的like

(15)使用索引的缺點
1)減慢增刪改數據的速度;
2)占用磁盤空間;
3)增加查詢優化器的負擔;
當查詢優化器生成執行計劃時,會考慮索引,太多的索引會給查詢優化器增加工作量,導致無法選擇最優的查詢方案;

(16)分析索引效率
方法:在一般的SQL語句前加上explain;
分析結果的含義:
1)table:表名;
2)type:連接的類型,(ALL/Range/Ref)。其中ref是最理想的;
3)possible_keys:查詢可以利用的索引名;
4)key:實際使用的索引;
5)key_len:索引中被使用部分的長度(字節);
6)ref:顯示列名字或者"const"(不明白什么意思);
7)rows:顯示MySQL認為在找到正確結果之前必須掃描的行數;
8)extra:MySQL的建議;

(17)使用較短的定長列
1)盡可能使用較短的數據類型;
2)盡可能使用定長數據類型;
a)用char代替varchar,固定長度的數據處理比變長的快些;
b)對于頻繁修改的表,磁盤容易形成碎片,從而影響數據庫的整體性能;
c)萬一出現數據表崩潰,使用固定長度數據行的表更容易重新構造。使用固定長度的數據行,每個記錄的開始位置都是固定記錄長度的倍數,可以很容易被檢測到,但是使用可變長度的數據行就不一定了;
d)對于MyISAM類型的數據表,雖然轉換成固定長度的數據列可以提高性能,但是占據的空間也大;

(18)使用not null和enum
盡量將列定義為not null,這樣可使數據的出來更快,所需的空間更少,而且在查詢時,MySQL不需要檢查是否存在特例,即null值,從而優化查詢;
如果一列只含有有限數目的特定值,如性別,是否有效或者入學年份等,在這種情況下應該考慮將其轉換為enum列的值,MySQL處理的更快,因為所有的enum值在系統內都是以標識數值來表示的;

(19)使用optimize table
對于經常修改的表,容易產生碎片,使在查詢數據庫時必須讀取更多的磁盤塊,降低查詢性能。具有可變長的表都存在磁盤碎片問題,這個問題對blob數據類型更為突出,因為其尺寸變化非常大。可以通過使用optimize table來整理碎片,保證數據庫性能不下降,優化那些受碎片影響的數據表。 optimize table可以用于MyISAM和BDB類型的數據表。實際上任何碎片整理方法都是用mysqldump來轉存數據表,然后使用轉存后的文件并重新建數據表;

(20)使用procedure analyse()
可以使用procedure analyse()顯示最佳類型的建議,使用很簡單,在select語句后面加上procedure analyse()就可以了;例如:
select * from students procedure analyse();
select * from students procedure analyse(16,256);
第二條語句要求procedure analyse()不要建議含有多于16個值,或者含有多于256字節的enum類型,如果沒有限制,輸出可能會很長;

(21)使用查詢緩存
1)查詢緩存的工作方式:
第一次執行某條select語句時,服務器記住該查詢的文本內容和查詢結果,存儲在緩存中,下次碰到這個語句時,直接從緩存中返回結果;當更新數據表后,該數據表的任何緩存查詢都變成無效的,并且會被丟棄。
2)配置緩存參數:
變量:query_cache _type,查詢緩存的操作模式。有3中模式,0:不緩存;1:緩存查詢,除非與select sql_no_cache開頭;2:根據需要只緩存那些以select sql_cache開頭的查詢;query_cache_size:設置查詢緩存的最大結果集的大小,比這個值大的不會被緩存。

?


本文轉自邴越博客園博客,原文鏈接:http://www.cnblogs.com/binyue/p/4056959.html,如需轉載請自行聯系原作者

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/540208.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/540208.shtml
英文地址,請注明出處:http://en.pswp.cn/news/540208.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

[轉載] 【Java】將一個字符串的字符排序,按ASCII表的順序從小到大

參考鏈接&#xff1a; 在Java中搜索字符串中的字符和子字符串 將一個字符串的字符按ASCII表的順序從小到大排序&#xff0c;如將字符串“asdafxcvMADb”排序為“ADMaabcdfsvx” 算法的基本思想&#xff1a; 先將字符串轉化為一個char類型的數組&#xff0c;來進行存儲&#xf…

如果只做前端驗證的話,談jjdd.com的看照片功能。

如果你在上海&#xff0c;并且坐過地鐵的話&#xff0c;你肯定知道jjdd.com。 這個網站和百合&#xff0c;世紀佳緣類似&#xff0c;都是交朋友的性質。 在jjdd.com中有個很重要的功能&#xff1a;如果你上傳的照片比你想看的人少的話&#xff0c;你是不能看她的照片的。 例如如…

[轉載] 快速學習-Mybatis框架概述

參考鏈接&#xff1a; Java在競爭性編程中的快速I/O 第1章 框架概述 1.1 什么是框架 1.1.1 什么是框架 框架&#xff08;Framework&#xff09;是整個或部分系統的可重用設計&#xff0c;表現為一組抽象構件及構件實例間交互的方法;另一種定義認為&#xff0c;框架是可被…

3、MySQL的數據類型介紹

上一章節內容主要介紹了一些MySQL中對表和庫的增刪改查操作&#xff0c;對于上一章中對與表中字段的一些定義進行說明&#xff0c;本章主要介紹關于數據庫類型的一些定義。一、概述&#xff1a;MySQL數據庫中的數據大致可以分為以下幾類&#xff0c;從而實現數據庫在操作的時候…

[轉載] 必須要會回答的Java面試題(字符串篇)

參考鏈接&#xff1a; 比較Java中的兩個字符串String 最近很多學習java的小白問我字串相關的問題&#xff0c;覺得很有必要整理下&#xff0c;以方便初學者理解字符串以及應對今后面試中考官的提問。 如果你是有幾年Java開發經驗&#xff0c;可以根據目錄選擇性的閱讀以下內…

[轉載] java如何實現一個字符串的反轉和替換

參考鏈接&#xff1a; 反轉Java中的字符串String 一、java字符串的反轉 1.利用java字符串的拼接實現字符串的反轉&#xff0c;代碼如下&#xff1a; public static String reverse(String s){ int lens.length(); String str""; for (int i 0; i < len; i) { …

java 中的instanceof

java 中的instanceof 運算符是用來在運行時指出對象是否是特定類的一個實例。instanceof通過返回一個布爾值來指出&#xff0c;這個對象是否是這個特定類或者是它的子類的一個實例。 用法&#xff1a;result object instanceof class參數&#xff1a;Result&#xff1a;布爾類…

[轉載] 將一個整數型字符串轉換為一個整數

參考鏈接&#xff1a; Java中整數到字符串轉換的不同方法 package com.utl.string; /* * 將一組整數字符串轉換為整數 * 例&#xff1a;"234"轉換為整數型234 * 分析&#xff1a;涉及到許多問題&#xff0c;例如非法輸入&#xff0c;有正負號&#xff0c;是否為空字…

升級PowerShell至4.0版本

為了更好的使用Cmder v1.2&#xff0c;不得不升級PowerShell為4.0。 不知道Cmder的&#xff0c;可以點擊這里&#xff1a;https://github.com/cmderdev/cmder 和 逆天神器 cmder。 Powershell是運行在Windows機器上實現系統和應用程序管理自動化的命令行腳本環境。 需要.NET環境…

[轉載] 字符串太長 pep8_Python f字符串– PEP 498 –文字字符串插值

參考鏈接&#xff1a; 從Java中的字符串中刪除前導零 字符串太長 pep8 Python f-strings or formatted strings are the new way to format strings. This feature was introduced in Python 3.6 under PEP-498. It’s also called literal string interpolation. Python f字符…

備忘(持續更新。。。)

1、在springmvc這個框架里面&#xff0c;創建新的業務邏輯層&#xff0c;dao、service層至少需要一個接口&#xff0c;項目才能跑起來 2、獲取當前用戶桌面路徑 File desktopDir FileSystemView.getFileSystemView() .getHomeDirectory();String desktopPath desktopDir.getA…

[轉載] 字符串操作截取后面的字符串_對字符串的5個必知的熊貓操作

參考鏈接&#xff1a; 修剪Java中的字符串(刪除前導和尾隨空格) 字符串操作截取后面的字符串 We have to represent every bit of data in numerical values to be processed and analyzed by machine learning and deep learning models. However, strings do not usually co…

更改域控制器的計算機名

林功能級別必須為Windows Server 2003及以上 1. netdom computername Server08-1.contoso.com /add:08Server1.contoso.com 2. netdom computername Server08-1.contoso.com /makeprimary:08Server1.contoso.com 3. Restart your computer 4. netdom computername 08Server1.co…

[轉載] Google Java代碼規范

參考鏈接&#xff1a; 使用Java計算文本文件txt中的行數/單詞數/字符數和段落數 原文地址&#xff1a;https://google.github.io/styleguide/javaguide.html GIthub上GoogleCode風格的配置文件&#xff08;支持Eclipse IDE和IntelliJ IDE&#xff09;&#xff1a;https://git…

SQL PASS西雅圖之行——簽證篇

本人有幸通過IT168&itpub的站慶活動http://www.itpub.net/thread-1716961-1-1.html&#xff0c;并應微軟邀請參加了在西雅圖舉辦的The Conference for SQL Server Professionals&#xff08;簡稱SQL-PASS&#xff09;。 SQL-PASS會議計劃于2012年11月6日-9日舉行&#xff0…

[轉載] java8 lambda表達式 List轉為Map

參考鏈接&#xff1a; 使用Lambda表達式檢查字符串在Java中是否僅包含字母 public static void main(String[] args) { List<User> userList new ArrayList<User>(); User user0 new User("han1", "男1", 20); User user1 new User("…

11.python并發入門(part5 event對象)

一、引入event。 每個線程&#xff0c;都是一個獨立運行的個體&#xff0c;并且每個線程的運行狀態是無法預測的。 如果一個程序中有很多個線程&#xff0c;程序的其他線程需要判斷某個線程的運行狀態&#xff0c;來確定自己下一步要執行哪些操作。 threading模塊中的event對象…

[轉載] Java 將字符串首字母轉為大寫 - 利用ASCII碼偏移

參考鏈接&#xff1a; 使用ASCII值檢查Java中的字符串是否僅包含字母 將字符串name 轉化為首字母大寫。普遍的做法是用subString()取第一個字母轉成大寫再與之后的拼接&#xff1a; str str.substring(0, 1).toUpperCase() str.substring(1); 看到一種效率更高的做法&…

俞永福卸任阿里大文娛董事長,改任 eWTP 投資組長

兩天前&#xff08;11月13日&#xff09;&#xff0c;阿里文娛董事長俞永福離職的消息&#xff0c;在互聯網圈炸了鍋。但很快&#xff0c;俞本人就在微博做了澄清&#xff0c;并稱“永遠幸福&#xff0c;我不會離開”。然而就在今天&#xff08;11月15日&#xff09;&#xff0…

[轉載] java提取字符串中的字母數字

參考鏈接&#xff1a; 使用Regex檢查字符串在Java中是否僅包含字母 String str "adsf adS DFASFSADF阿德斯防守對方asdfsadf37《&#xff1f;&#xff1a;&#xff1f;%#&#xffe5;%#&#xffe5;%#$%#$%^><?1234"; str str.replaceAll("[^a-zA-…