本文目錄一覽:
mysql基本語句詳細教程
看他們網上的,寫得都是千篇一律,同時,好多也寫得不是很好,下面是我自己總結的有關mysql的使用細節,也是我在學習過程中的一些記錄吧,希望對你有點幫助,後面有關存儲過程等相關操作還沒有總結好,下次總結好了再發給你吧,呵呵~~~~~
MySql學習筆記
MySql概述:MySql是一個種關聯數據庫管理系統,所謂關聯數據庫就是將數據保存在不同的表中,而不是將所有數據放在一個大的倉庫中。這樣就增加了速度與提高了靈活性。並且MySql軟件是一個開放源碼軟件。
注意,MySql所支持的TimeStamp的最大範圍的問題,在32位機器上,支持的取值範圍是年份最好不要超過2030年,然後如果在64位的機器上,年份可以達到2106年,而對於date、與datetime這兩種類型,則沒有關係,都可以表示到9999-12-31,所以這一點得注意下;還有,在安裝MySql的時候,我們一般都選擇Typical(典型安裝)就可以了,當然,如果還有其它用途的話,那最好選擇Complete(完全安裝);在安裝過程中,一般的還會讓你進行服務器類型的選擇,分別有三種服務器類型的選擇,(Developer(開發機)、Server Machine(服務器)、Dedicated MySql Server Machine(專用MYSQL服務器)),選擇哪種類型的服務器,只會對配置嚮導對內存等有影響,不然其它方面是沒有什麼影響的;所以,我們如果是開發者,選擇開發機就可以啦;然後接下來,還會有數據庫使用情況對話框的選擇,我們只要按照默認就可以啦;
連接與斷開服務器:
連接:在windows命令提示符下輸入類似如下命令集:mysql –h host –u user –p
例如,我在用的時候輸入的是:mysql –h localhost –u root –p
然後會提示要你輸入用戶密碼,這個時候,如果你有密碼的話,就輸入密碼敲回車,如果沒有密碼,直接敲回車,就可以進入到數據庫客戶端;連接遠程主機上的mysql,可以用下面的命令:mysql –h 159.0.45.1 –u root –p 123
斷開服務器:在進入客戶端後,你可以直接輸入quit然後回車就可以了;
下面就數據庫相關命令進行相關說明
你可以輸入以下命令對數據庫表格或者數據庫進行相關操作,在這裡就省略了,然後直接進行文字說明了;
Select version(),current_date;//從服務器得到當前mysql的版本號與當前日期
Select user(); //得到當前數據庫的所有用戶
Use databasename; 進入到指定的數據庫當中,然後就可以操作這個數據庫當中的表格了
Show databases; //查詢目前數據庫中所有的數據庫,並且顯示出來;
Create batabase databasename;創建數據庫,例如:create database manager;
Show tables; //查看當前數據庫中的所有表格;
Create table tablename(colums);創建表,並且給表指定相關列,例如:create table pet(name varchar(20),owner varchar(20),species varchar(20),sex char(1),birth date,death date);
Describe tablename;將表當中的所有信息詳細顯示出來,例如:describe pet;
可以用命令一次插入多條記錄,例如:
Insert into pet values(‘Puffball’,’Diane’,’hamster’,’f’,’1993-12-3’,null),( ‘Puffball’,’Diane’,’hamster’,’f’,’1993-12-3’,now());
Select * from pet; 從pet表當中查詢出所有的記錄,顯示出來;
Delete from pet where id=1;刪除ID為1的那一條記錄;
Update pet set birth=’2001-1-3’ where name=’Bowser’;更新name為Bowser的記錄當中的birth字段的值;
Select distinct owner from pet;從pet表中選擇出owner字段的值唯一的行,如果有多行記錄這個字段的值相同,則只顯示最後一次出現這一值的一行記錄;
有關日期計算:
Select name,birth,curdate(),(year(curdate())-year(birth)) as age from pet;
此處,year()函數用於提取對應字段的年份,當然類似的還有month(),day()等;
在mysql當中,sql語句可以使用like查詢,可以用”_”配任何單個字符,用”%”配任意數目字符,並且SQL模式默認是忽略大小寫,例如:select * from pet where name like ‘%fy’;
當然也可以用正則表達式模式進行配。
同時在sql當中,也要注意分組函數、排序函數、統計函數等相關用法,在這裡只列舉一二;
Select species,count(*) from pet group by speceis;
Select * from pet order by birth desc;
查詢最大值的相關操作:
Select max(age) from pet;
取前多少項記錄,這個主要用於分頁查詢操作當中,
Select * from pet order by birth desc limit 3;取前三條記錄,
Select * from pet order by birth desc limit 0,3;這個可以用於分頁查詢,limit後面的第一個參數,是起始位置,第二個參數是取記錄條數;
有關創建表格自增長字段的寫法:
Create table person(id int(4) not null auto_increment,name char(20) not null,primary key (id));
修改表操作:
向表中增加字段:注意,在這個地方,如果是增加多個字段的時候,就要用括號括起來,不然會有問題,如果是單個字段的話,不用括號也沒事;
Alter table test add(address varchar(50) not null default ‘xm’,email varchar(20) not null);
將表中某個字段的名字修改或者修改其對應的相關屬性的時候,要用change對其進行操作;
Alter table test change email email varchar(20) not null default ‘zz’;//不修改字段名
Alter table test change email Email varchar(30) not null;//修改字段名稱
刪除表中字段:
Alter table test drop email;//刪除單個字段
Alter table test drop address,drop email;//刪除多列
可以用Drop來取消主鍵與外鍵等,例如:
Alter table test drop foreign key fk_symbol;
刪除索引:
Drop index index_name on table_name;
例如:drop index t on test;
向表中插入記錄:注意,當插入表中的記錄並不是所有的字段的時候,應該要在前面列出字段名稱才行,不然會報錯;
Insert into test(name) values(‘ltx’);
Insert into test values(1,’ltx’);
也可以向表中同時插入多列值,如:
Insert into test(name) values(‘ltx’),(‘hhy’),(‘xf’);
刪除表中記錄:
Delete from test;//刪除表中所有記錄;
Delete from test where id=1;//刪除表中特定條件下的記錄;
當要從一個表或者多個表當中查詢出一些字段然後把這些字段又要插入到另一個表當中的時候,可以用insert …..select語法;
Insert into testt(name) (select name from test where id=4);
從文件中讀取行插入數據表中,可以用Load data infile語句;
Load data infile ‘test.txt’ into table test;
可以用Describe語法進行獲取有關列的信息;
Describe test;//可以查看test表的所有信息,包括對應列字段的數據類型等;
MySql事務處理相關語法;
開始一項新的事務:start transaction或者begin transaction
提交事務:commit
事務回滾:rollback
set autocommit true|false 語句可以禁用或啟用默認的autocommit模式,只可用於當前連接;
例子:
Start transaction;
Update person set name=’LJB’ where id=1;
Commit | rollback;
數據庫管理語句
修改用戶密碼:以root用戶為例,則可以寫成下面的;mysql –u root –p 舊密碼 –password 新密碼
Mysql –u root –password 123;//將root用戶的密碼修改成123,由於root用戶開始的時候,是沒有密碼的,所以-p舊密碼就省略了;
例如修改一個有密碼的用戶密碼:mysql –u ltx –p 123 –password 456;
增加一個用戶test1,密碼為abc,讓他可以在任何時候主機上登陸,並對所有數據庫有查詢、插入、修改、刪除的權限。
Grant select,insert,update,delete on *.* to test1@”%” identified by ‘abc’;
增加一個test2用戶,密碼為abc,讓他只可以在localhost上登陸,並且可以對數據庫進行查詢、插入、修改、刪除操作;
Grant select,insert,update,delete on mydb.* to test2@localhost identified by ‘abc’;
如果不想讓用戶test2有密碼,可以再輸入以下命令消掉密碼:
Grant select,insert,update,delete on mydb.* to test2@localhost identified by “”;
備份數據庫常用命令:mysqldump –h host –u username –p dbname保存路徑與文件名
然後回車後,會讓你輸入用戶密碼,輸入密碼後,再回車就OK啦;
Mysqldump –hlocalhost –uroot –p test E:\db\test.sql
這一命令具體解釋下:
這個命令就是備份test數據庫,並且將備份的內容存儲為test.sql文件,並且保存在E:\db下面;
命令當中-p 前面的test是數據庫名,然後在數據庫名後面要跟上一個””,然後接下來,就是寫要保存的位置與保存文件的文件名;
將備份好的數據庫導入到數據庫當中去:也就是運行.sql文件將數據庫導入數據庫當中去-
首先你得創建數據庫,然後運行如下命令:mysql –hlocalhost –uroot –p linuxE:\db\test.sql然後回車,再輸入密碼就可以啦;
解釋下上面的命令:linux是就要導入的數據庫名字,然後後面要緊跟着“”符號,然後後面就是要導入的數據庫文件;
將數據庫導出保存成XML文件、從XML文件導入數據到數據庫:
導出表中數據:mysql –X –h hostName –u userName –p Pwd –e “use DatabaseName;sql;” xml文件名
或者用另外一種方式也行:mysqldump –xml –h hostName –u userName –p pwd dbName tableName //這一種只用於顯示在當前的mysql客戶端,不保存到文件當中;
相關說明:-X代表的是文件的格式是XML,然後-e一寫不能掉,還有就是要用雙引號將要操作的語句括起來;單引號不行;
例如:mysql –X –hlocalhost –uroot –p –e “use test;select * from pet;”E:\db\out.xml
從XML文件導入數據到數據庫:
Insert into tableName values(1,load_file(‘filepath’));
例如:insert into pet values(1,load_file(“E:\db\out.xml”));
查看數據庫狀態與查詢進程:
Show status;//查看狀態
Show processlist;//查看進程
更改用戶名,用以下命令:
Update set user=”新名字” where user=”舊用戶名”;
給數據庫用戶設置管理員權限:
Mysqladmin –h host –u username –p pwd;
以root用戶為例;
Mysqladmin –h localhost –u root –p 123;
存儲過程與函數
存儲程序和函數分別是用create procedure和create function語句,一個程序要麼是一個程序要麼是一個函數,使用call語句來調用程序,並且程序只能用輸出變量傳回值;
要想在MySql5.1中創建子程序,必須具有create routine權限,並且alter routine和execute權限被自動授予它的創建者;
創建存儲過程:
首先聲明分隔符,所謂分隔符是指你通知mysql客戶端你已經輸入一個sql語句的字符或字符串符號,在這裡我們就以“//”為分隔符;
Delimiter 分隔符\
如:delimiter //
再創建存儲過程:
Create procedure 存儲過程名 ( )
聲明存儲過程開始:
begin
然後開始寫存儲過程體:
Select * from pet;
結束存儲過程:
End;//
剛剛的例子全部寫出來,完整的代碼就是:
Delimiter //
Create procedure spt () //注意,這個地方,存儲過程名與括號之間要有個空格
Begin
Select * from pet;
End;//到這裡,整個存儲過程就算寫完啦
執行存儲過程:
Call 存儲過程名 ();//
如,我們執行剛剛創建的存儲過程,就是:
Call spt ();//
需要說明的是存儲過程名後面一定要加個空格,而後面那個括號,則是用於傳送參數的參數列表;另外,我們創建存儲過程完成後,也只是創建了,但是只有調用call 存儲過程名 ();//後才算執行完畢,才能看到存儲過程的結果;
求PHP對MYSQL的簡單操作代碼!
?php
$db=mysql_connect(“host”,”dbuser”,”password”); //連接數據庫服務器
mysql_select_db(“dbname”,$db); //選擇數據庫
mysql_query(“set names gbk”); //統一字符集
//查詢示例:
$sql=”select * from tablename where condition”; //構造查詢語句
$result=mysql_query($sql,$db); //在先前選中的數據庫中執行查詢操作
//從查詢結果集中取一行輸出,直至所有行輸出完畢
while($myrow=mysql_fetch_array($result))
{
print_r($myrow);
}
//插入示例:
$sql=”insert into tablename values (‘field1′,’field2’,…….)”; //構造插入語句
$result=mysql_query($sql,$db); //執行插入
if ($result)
{
echo “插入成功!”;
exit;
}
else
{
echo “插入失敗!”;
exit;
}
//修改、刪除都是類似的,不再嚕嗦
?
高分求mysql創建數據庫及表的代碼?
創造並使用一個數據庫
mysql SHOW DATABASES;
+———-+
| Database |
+———-+
| mysql |
| test |
| tmp |
+———-+
mysql USE test
Database changed
mysql GRANT ALL ON menagerie.* TO your_mysql_name;
mysql CREATE DATABASE menagerie;
mysql USE menagerie
Database changed
shell mysql -h host -u user -p menagerie
Enter password: ********
8.4.2 創建一個數據庫表
創建數據庫是容易的部分,但是在這時它是空的,正如SHOW TABLES將告訴你:
mysql SHOW TABLES;
Empty set (0.00 sec)
使用一個CREATE TABLE語句指定你的數據庫表的布局:
mysql CREATE TABLE pet (name VARCHAR(20), owner VARCHAR(20),
– species VARCHAR(20), sex CHAR(1), birth DATE, death DATE);
VARCHAR對name、owner和species列是個好的選擇,因為列值將會是變長的。這些列的長度都不必是相同的,而且不必是20。你可以挑選從1到255的任何長度,無論哪個對你來說好象最合理。(如果你做了較差的選擇,以後會變得你需要一個更長的字段,MySQL提供一個ALTER TABLE語句。)
動物性表可以用許多方法表示,例如,”m”和”f”,或也許”male”和”female”。使用單個字符”m”和”f”是最簡單的。
為birth和death列使用DATE數據類型是相當明顯的選擇。
mysql中的一些稍微複雜用法實例代碼
前言
mysql的語法相信對大家來說都不是難事,但是本文主要給分享了一些mysql複雜用法的相關內容,通過這篇文章相信大家會對mysql更深的了解一些,下面話不多說了,來一起看看詳細的介紹吧
一對多數據顯示成一行
GROUP_CONCAT(expr)
1、涉及的表關係:teacher表、teacher_subject_rel表(教師所能教的學科表)、subject表
2、業務場景:
需要拉取所有教師的編號(teacher_no)、學科名(subject_name)。
nbsp
教師表(teacher)和學科(teacher_subject_rel)是一對多關係,
往往查詢出現的是同一教師多條
數據。我們希望得到每個教師一條數據
學科拼接成一條
1、基本語法
group_concat(
[DISTINCT]
要連接的字段
[Order
BY
排序字段
ASC/DESC]
[Separator
‘分隔符’]
)
2、例子
SELECT
t.teacher_id
as
‘教師id’,
t.teacher_no
‘教師編號’,
(
SELECT
GROUP_CONCAT(s.subject_name)
FROM
teacher_subject_rel
tsr
LEFT
JOIN
`subject`
s
ON
tsr.subject_id
=
s.subject_id
WHERE
t.teacher_id
=
tsr.teacher_id
)
AS
‘學科’
FROM
teacher
t
子查詢、查詢臨時表、EXISTS
例子
SELECT
*
FROM
(
SELECT
o.id,
o.student_intention_id,
s.
NAME,
s.area_id,
a.area_name,
s.exam_year,
o.
STATUS,
CASE
o.
STATUS
WHEN
‘1’
THEN
‘待提交’
WHEN
‘2’
THEN
‘待指派’
WHEN
‘3’
THEN
‘已完成’
WHEN
‘4’
THEN
‘處理中’
END
statusName,
CASE
o.emergency_degree
WHEN
‘1’
THEN
‘正常’
WHEN
‘2’
THEN
‘緊急’
WHEN
‘3’
THEN
‘非常緊急’
END
emergencyDegreeName,
o.emergency_degree,
o.update_time,
(
SELECT
first_lesson_time
FROM
jx_strategy
WHERE
jx_lesson_plan_order_id
=
o.id
AND
STATUS
IN
(2,
7)
AND
first_lesson_time
now()
ORDER
BY
first_lesson_time
ASC
LIMIT
1
)
AS
first_time,
(
SELECT
deal_user_id
FROM
jx_strategy
WHERE
jx_lesson_plan_order_id
=
o.id
AND
STATUS
7
AND
deal_user_id
ORDER
BY
id
DESC
LIMIT
1
)
AS
deal_user_id
FROM
jx_lesson_plan_order
o
LEFT
JOIN
student
s
ON
s.student_intention_id
=
o.student_intention_id
LEFT
JOIN
area
a
ON
s.area_id
=
a.id
WHERE
o.
STATUS
1
AND
s.phone
=
‘18501665888’
AND
o.emergency_degree
=
1
AND
o.
STATUS
=
2
AND
s.exam_year
=
‘2015’
AND
o.update_time
=
‘2018-08-14
20:28:55′
AND
o.update_time
=
‘2018-08-14
20:28:55′
)
AS
a
WHERE
1
=
1
AND
a.deal_user_id
=
145316
AND
a.first_time
=
‘2018-08-17
00:00:00′
AND
a.first_time
=
‘2018-08-30
00:00:00′
AND
EXISTS
(
SELECT
*
FROM
jx_strategy
js
WHERE
js.jx_lesson_plan_order_id
=
a.id
AND
js.
STATUS
IN
(2,
7)
AND
js.subject_id
IN
(2,
3)
)
ORDER
BY
a.update_time
DESC
LIMIT
0,
10
update
關聯變量條件修改
1、涉及的表關係:
user_info表中的
id_number(身份證號)
teacher表中的birth字段、
關聯關係usrer_id
=
teacher_id
2、業務場景:獲取用戶身份證上的出生日期將出生日期更新在birth字段
UPDATE
teacher
t
INNER
JOIN
(
SELECT
t.teacher_id,
t.birth,
u.id_number,
CONCAT(SUBSTRING(u.id_number,
7,
4),
‘-‘,
SUBSTRING(u.id_number,
11,
2),
‘-‘,
SUBSTRING(u.id_number,
13,
2))
as
birth1,
u.reg_date,
t.exit_time
from
teacher
t
INNER
JOIN
user_info
u
ON
u.user_id
=
t.teacher_id
)
info
on
info.teacher_id
=
t.teacher_id
SET
t.birth
=
info.birth1
WHERE
info.reg_date
‘2018-08-20
00:00:00′
and
info.id_number
is
not
NULL
and
(info.birth
is
NULL
or
t.birth
=
”)
and
t.is_train
=
1
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
您可能感興趣的文章:MySQL在關聯複雜情況下所能做出的一些優化Mysql一些複雜的sql語句(查詢與刪除重複的行)深入mysql
“ON
DUPLICATE
KEY
UPDATE”
語法的分析MySQL
最基本的SQL語法/語句MySQL與Oracle的語法區別詳細對比淺析Mysql
Join語法以及性能優化MySQL
ALTER語法的運用方法MySQL
prepare語句的SQL語法MySQL進階SELECT語法篇MySQL
SQL
語法參考
原創文章,作者:WQVOE,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/316231.html