第一篇:mysql問題解決總結
MySql問題解決總結
ERROR 1045(28000): Access denied for user 'root'@'localhost'(using password: YES)ERROR 1045(28000): Access denied for user 'root'@'localhost'(using password: NO)
這種問題就是mysql密碼需要重置; 重置方式:
1.打開/etc/mysql/debian.cnf文件,里面存儲了相關的密碼,我的文件信息如下
sudovi /etc/mysql/debian.cnf# Automatically generated for Debian scripts.DO NOT TOUCH![client] host = localhost user = debian-sys-maint password = 6x1XG2B5p75WtFV2 socket = /var/run/mysqld/mysqld.sock [mysql_upgrade] host = localhost user = debian-sys-maint password = 6x1XG2B5p75WtFV2 socket = /var/run/mysqld/mysqld.sock basedir = /usr 在[client]段有user=以及password=這兩行,這就是通過apt-get安裝mysql,系統給我們設置的mysql登錄名和密碼
2.輸入命令: mysql-udebian-sys-maint-pdebian-sys-maint即debian.cnf中user=后面的內容.回車后會提示輸入密碼,此時把password=后面的內容復制粘貼后回車即可進行mysql 控制臺
3.進入控制臺后.按以下步驟進行: use mysql;update user set password=PASSWORD('新密碼')where user='root';FLUSH PRIVILEGES;此時可以輸入quit;退出后用root帳號登錄,也可以繼續其他操作.
第二篇:mySql總結
Mysql命令:在mysql的bin目錄下執行: Mysql –h host_name –u user_name –p password Use 數據庫名;選定默認數據庫(切換數據庫)查詢當前使用的數據庫:select database(); Show databases;顯示所有數據庫;
Show tables ;顯示默認數據庫下的所有表; Show status;顯示服務器狀態信息 c;放棄正在輸入的命令; h;顯示命令清單;
s;顯示mysql服務器狀態信息; q;退出mysql;
Describe 表名:查看表結構;
檔案柜相當于數據庫,抽屜相當于表,抽屜中的文件相當于記錄;
0x:加1到9的數字或者a到f就可以構成16進制了。注意零x中的x不能大寫。字符串:單引號或者雙引號引起來的都是字符串; Tinyint是1字節; Smallint是2字節; Mediumint是3字節; Int是4字節 Bigint是8字節; 刪除主表前,先刪除子表。選擇主鍵的原則:
1)最少性:盡量選擇單個鍵做為主鍵
2)穩定性:盡量選擇數值更新少的列作為主鍵。查看自定義函數創建信息:
Show create function function_name;類型總結:
Tinyint :占一個字節,它的范圍是-128到127 Smallint:占2個字節,它的范圍是-2的15次方到2的15次方減一; Mediumint:占3個字節,它的范圍是-2的23次方到2的23次方減一; Int:占4個字節,它的范圍是-2的31次方到2的31次方減一; Bigint:占8個字節,它的范圍是-2的63次方到2的63次方減一; Float:占4個字節 Double:占8個字節
Decimal(m,n):占m個字節; Char(10)和char(10 char)是一樣的;
數值列的完整性約束講解:
Auto increment(自動標識列):在需要產生唯一標示符號或者順序值的時候,可用此屬性。值從1開始,一般在插入null到auto increment列時,mysql會插入比當前列最大值大1的值。一個表中最多能有一個此屬性的列。對于想使用此屬性的列應該定義為not null,并定義為primary key或者定義為unique。
Null 和not null:默認是null,如果在插入數據時,指定了not null,那么在插入數據時必須要在此字段插入數據。如果指定了null ,那么在插入數據時,如果沒有給此字段插入數據,此字段就插入null.mysql-h host-u user-p menagerie 注意,剛才顯示的命令行中的menagerie不是你的 密碼。如果你想要在命令行上在-p選項后提供 密碼,則不能插入空格(例如,如-pmypassword,不是-p mypassword)。但是,不建議在命令行輸入密碼,因為這樣會暴露 密碼,能被在機器上登錄的其它用戶窺探到。
查詢當前日期:使用curdate()函數,任何表都可以的。Select curdate()from cjym;可以通過year,month,day獲取它的年月日。Select year(curdate())from cjym;Select month(curdate())from cjym;Select day(curdate())from cjym;Mysql中的_和%表示單個字符和零個或者多個字符; 有like 和not like比較操作符;
要想找出你的服務器支持哪個存儲引擎,執行下面的語句: Show engines;Select 1/7;都可以; 日期和時間類型: Time :時間; Date:日期;
Datetime:日期和時間; 創建表:
Create table student(Student_id int(10)not null primary key auto_increment, Student_name varchar(20));注意在創建表的時候,如果是手動寫sql語句的時候自動標示符要寫這樣的 auto_increment;有個下劃線; 更改表結構操作:
給表添加一條字段:在最前面加字段用first,在最后面加用after;默認在最后加; Alter table student add age int first;給表設定默認值:
Alter table student alter column_name set default default_value;給表中的字段添加主鍵;如果主鍵存在則出現錯誤; Alter table student add primary key(column_name);刪除表中的一列:
Alter table student drop column_name;刪除表中的主鍵: Alter table student drop primary key;更改表的名字:
Alter table student rename as new_tablename;修改表中的字段類型: Alter table student modify sno int;運算符:
Between。。and用于檢驗一個值(一個求值表達式)是否存在一個指定的范圍內;
Select 10 between 1 and 100;結果是1:表示是真的;
In 用于檢驗一個值(一個表達式)是否包含在一個指定的集合中。
Select 2 in(1,2,3,4,5,6),’a’ in(‘b’,’e’,.’h’);結果顯示1和0;1表示真,0表示假;
Is null和is not null來測定是否為空;
特殊的運算符:<=>:mysql稱它為null安全的等于; Select null=null,null< = >null;結果顯示null和1; Regexp運算符; Mysql中的元字符;
邏輯運算符:and(&&),or(||),not(!)插入數據時,插入多行值時:
插入多行數據: Insert into 表名(列名)Select 列名 From 表名;
更改記錄的操作語法格式:
Update 表名 set 列名=更新值 [where 更新條件] 刪除記錄的操作格式:
Delete from 表名 [where 刪除條件]; 表和字段的引用方式有兩種: 絕對引用:數據庫名.表名(.字段名);相對引用:表名.(字段名); Where子句使用的謂詞:
Between。。and。。在兩數之間 Not between ….and ….不在兩數之間 In:是否在特定的集合里。Not in :與上面相反。Like:是否匹配一個模式;
Regexp:檢查一個值是否匹配一個常規表達式; 復制表:
Create table student select name,age from stu;復制表后,表中的字段和stu表中的字段一樣并且記錄數也是存在的;
學習地址:http://
Mysql的存儲過程: Create procedure p()Begin End;
delimiter //
create procedure math_demo()begin
declare i int default 0;
declare d decimal(10,4)default 0;
declare f float default 0;
while i < 10000 do
set d = d +.0001;
set f = f +.0001E0;
set i = i + 1;
end while;
select d,f;end // call math_demo();
mysql中的自定義方法的使用 delimiter // create function function_name()returns return_type;begin
end;// 執行mysql自定義的函數用 Select function_name();
#mysql中的存儲過程 delimiter //
create procedure math_demo()begin
declare i int default 0;
declare d decimal(10,4)default 0;…….return return_value;
declare f float default 0;
while i < 10000 do
set d = d +.0001;
set f = f +.0001E0;
set i = i + 1;
end while;
select d,f;end // call math_demo();// delimiter // create function xiaoxiao()returns int begin return 2;end;// #在mysql中創建的自定義函數要加的delimiter,都要一次性選中執行。每條語句都要用分號結束。delimiter // create function xiaoxiao1()returns int begin return 2;end // #執行mysql中的自定義函數 select xiaoxiao1();
根據一個布爾值來檢驗一個值,在這里布爾值可以是true,false,unknown;
運算符: 等號:=,<=>,不等號:!=,<>;賦值號::=;? XOR
邏輯XOR。當任意一個操作數為 NULL時,返回值為NULL。對于非 NULL 的操作數,假如一個奇數操作數為非零值,則計算所得結果為 1,否則為 0。
a XOR b 的計算等同于(a AND(NOT b))OR((NOT a)和 b)。
Coalesce();函數的使用方法:
返回值為列表中第一非null值,在沒有非null值的情況下返回null。
Greatest();函數的使用及功能說明:
當函數有2個或者2個以上的參數時,返回參數中的最大參數值,比較參數所依據的規律同least()函數相同。
Interval();函數的使用及功能說明: INTERVAL(N,N1,N2,N3,...)
假如N < N1,則返回值為0;假如N < N2 等等,則返回值為1;假如N 為NULL,則返回值為-1。所有的參數均按照整數處理。為了這個函數的正確運行,必須滿足 N1 < N2 < N3 < ……< Nn。其原因是使用了二分查找(極快速)。
Least();函數的使用及功能說明: · LEAST(value1,value2,...)
在有兩個或多個參數的情況下,返回值為最小(最小值)參數。用一下規則將自變量進行對比:
o 假如返回值被用在一個 INTEGER 語境中,或是所有參數均為整數值,則將其作為整數值進行比較。
假如返回值被用在一個 REAL語境中,或所有參數均為實值,則 將其作為實值進行比較。
o 假如任意一個參數是一個區分大小寫的字符串,則將參數按照區分大小寫的字符串進行比較。
o 在其它情況下,將參數作為區分大小寫的字符串進行比較。o
假如任意一個自變量為NULL,則 LEAST()的返回值為NULL。
二,控制流函數 Case的使用: 格式1: Case value
when [compare_value] then result_value when [compare_value2] then result_value2 else result_value3 end
格式2: case when value=[compare_value1] then result_value else result_value2 end
? IF(expr1,expr2,expr3)
如果 expr1 是TRUE(expr1 <> 0 and expr1 <> NULL),則 IF()的返回值為expr2;否則返回值則為 expr3。IF()的返回值為數字值或字符串值,具體情況視其所在語境而定。
ASCII()函數查看對應符號的ascii碼。
第三篇:MySql知識點總結
1.數據庫創建 : Create database db_name;
數據庫刪除 : Drop database db_name;刪除時可先判斷是否存在,寫成 : drop database if exits db_name.建表 : 創建數據表的語法 : create table table_name(字段1 數據類型 , 字段2 數據類型);
例 : create table mytable(id int , username char(20));
刪表 : drop table table_name;例 : drop table mytable;.添加數據 : Insert into 表名 [(字段1 , 字段2 , ….)] values(值1 , 值2 , …..);
如果向表中的每個字段都插入一個值,那么前面 [ ] 括號內字段名可寫也可不寫
例 : insert into mytable(id,username)values(1,’zhangsan’);.查詢 : 查詢所有數據 : select * from table_name;
查詢指定字段的數據 : select 字段1 , 字段2 from table_name;
例 : select id,username from mytable where id=1 order by desc;多表查詢語句------------參照第17條實例.更新指定數據 , 更新某一個字段的數據(注意,不是更新字段的名字)
Update table_name set 字段名=’新值’ [, 字段2 =’新值’ , …..][where id=id_num] [order by 字段 順序]
例 : update mytable set username=’lisi’ where id=1;
Order語句是查詢的順序 , 如 : order by id desc(或asc), 順序有兩種 : desc倒序(100—1,即從最新數據往后查詢),asc(從1-100),Where和order語句也可用于查詢select 與刪除delete.刪除表中的信息 :
刪除整個表中的信息 : delete from table_name;
刪除表中指定條件的語句 : delete from table_name where 條件語句;條件語句如 : id=3;.創建數據庫用戶
一次可以創建多個數據庫用戶如:
CREATE USER username1 identified BY ‘password’ , username2 IDENTIFIED BY ‘password’…..用戶的權限控制:grant
庫,表級的權限控制 : 將某個庫中的某個表的控制權賦予某個用戶
Grant all ON db_name.table_name TO user_name [ indentified by ‘password’ ];.表結構的修改
(1)增加一個字段格式:
alter table table_name add column(字段名 字段類型);----此方法帶括號
(2)指定字段插入的位置:
alter table table_name add column 字段名 字段類型 after 某字段;
刪除一個字段:
alter table table_name drop字段名;
(3)修改字段名稱/類型
alter table table_name change 舊字段名 新字段名 新字段的類型;
(4)改表的名字
alter table table_name rename to new_table_name;
(5)一次性清空表中的所有數據
truncate table table_name;此方法也會使表中的取號器(ID)從1開始.增加主鍵,外鍵,約束,索引。。(使用方法見17實例)
① 約束(主鍵Primary key、唯一性Unique、非空Not Null)
② 自動增張 auto_increment
③外鍵Foreign key-----與reference table_name(col_name列名)配合使用,建表時單獨使用
④ 刪除多個表中有關聯的數據----設置foreign key 為set null---具體設置參考幫助文檔.查看數據庫當前引擎
SHOW CREATE TABLE table_name;
修改數據庫引擎
ALTER TABLE table_name ENGINE=MyISAM | InnoDB;.SQL語句運用實例:
--1 建users表
create table users
(id int primary key auto_increment, nikename varchar(20)not null unique, password varchar(100)not null, address varchar(200),reg_date timestamp not null default CURRENT_TIMESTAMP);
--2 建articles表,在建表時設置外鍵
create table articles(id int primary key auto_increment,content longtext not null,userid int,constraint foreign key(userid)references users(id)on delete set null);
---------
--2.1 建articles表,建表時不設置外鍵
create table articles(id int primary key auto_increment,content longtext not null,userid int);
--2.2 給articles表設置外鍵
alter table articles add constraint foreign key(userid)references users(id)on delete set null;
----------
--3.向users表中插入數據,同時插入多條
insert into
users
(id,nikename,password,address)
values(1,'lyh1','1234',null),(10,'lyh22','4321','湖北武漢'),(null,'lyh333','5678', '北京海淀');
--4.向article中插入三條數據
insert
into
articles
(id,content,userid)
values(2,'hahahahahaha',11),(null,'xixixixixix',10),(13,'aiaiaiaiaiaiaiaiaiaiaiaia',1),(14,'hohoahaoaoooooooooo',10);
--5.進行多表查詢,選擇users表中ID=10的用戶發布的所有留言及該用戶的所有信息
select articles.id,articles.content,users.* from users,articles where users.id=10 and articles.userid=users.id order by articles.id desc;
--6.查看數據庫引擎類型
show create table users;
--7.修改數據庫引擎類型
alter table users engine=MyISAM;---因為users表中ID被設置成外鍵,執行此句會出錯
--8.同表查詢,已知一個條件的情況下.查詢ID號大于用戶lyh1的ID號的所有用戶
select a.id,a.nikename,a.address from users a,users b where b.nikename='lyh1' and a.id>b.id;
------也可寫成
select id,nikename,address from users where id>(select id from users where nikename='lyh1');
9.顯示年齡比領導還大的員工:
select a.name from users a,users b where a.managerid=b.id and a.age>b.age;
查詢編號為2的發帖人: 先查articles表,得到發帖人的編號,再根據編號查users得到的用戶名。
接著用關聯查詢.select * from articles,users得到笛卡兒積,再加order by articles.id以便觀察
使用select * from articles,users where articles.id=2 篩選出2號帖子與每個用戶的組合記錄
再使用select * from articles,users where articles.id=2 and articles.userid=users.id選出users.id等于2號帖的發帖人id的記錄.只取用戶名:select user where user.id=(select userid from articles where article.id =2)
找出年齡比小王還大的人:假設小王是28歲,先想找出年齡大于28的人
select * from users where age>(select age from users where name='xiaowang');
*****要查詢的記錄需要參照表里面的其他記錄:
select a.name from users a,users b where b.name='xiaowang' and a.age>b.age
表里的每個用戶都想pk一下.select a.nickname,b.nickname from users a,users b where a.id>b.id;
更保險的語句:select a.nickname,b.nickname from(select * from users order by id)a,(se
lect * from users order by id)b where a.id>b.id;
再查詢某個人發的所有帖子.select b.* from articles a , articles b where a.id=2 and a.userid=b.userid
說明: 表之間存在著關系,ER概念的解釋,用access中的示例數據庫演示表之間的關系.只有innodb引擎才支持foreign key,mysql的任何引擎目前都不支持check約束。
第四篇:mysql數據庫要點總結
查詢(R)Selec子句
書寫順序
Select distinct:要返回的列或表達式 From:從中檢索數據的表 Where:行級過濾/分組前過濾 group by:分組說明
having:組級過濾/分組后過濾 order by:輸出排序順序desc/asc limit start, count:要檢索的行數 limit 3,4 從第3行開始的連續4行
SELECT order_num,sum(quantity*item_price)ordertotal FROM orderitems WHEREorder_numBETWEEN20005AND 20009GROUP BY order_num HAVINGsum(quantity*item_price)>=50ORDER BYordertotalDESCLIMIT4;執行順序
From表名->inner/left/right/ join on->where->group by->select distinct *->having->order by->limit start, count 插入Insert into(C)INSERT INTO students(name)values(‘楊過’),(‘小龍女’);更新(U)Update UPDATE customers SETcust_email = ‘elmer@fudd.com’WHEREcust_id = 10005;刪除(D)Delete DELETE FROM customers WHEREcust_id = 10006;Truncate刪除原來的表并重新創建一個表,刪除標的全部內容時效率高。
操作表
創建CREATE TABLE customers(Cust_idint not null auto_increment primary key,Cust_name char(50)not null,Cust_addresschar(50)null)engine = innoDB;更新ALTER TABLE刪除DROP TABLEcustomers2;重命名RENAME TABLE customers2 TO customers;操作數據庫
創建CREATE DATABASE xxx charset = utf8;刪除DROP DATABASEXXX;切換USE XXX;查看SHOW DATABASES;關聯查詢
INNER/LEFT/RIGHTJOIN ON SELECT students.name,subjects.title,scores.scoreFROM scores INNER JOIN students ONscores.stuid = students.id INNER JOIN subjects ONscores.subid = subjects.id;
第五篇:MySQL學習心得
MySQL學習心得
第一章
一、數據庫管理系統(DBMS)是操作和管理數據庫的大型軟件,它按一定的數據模型組織數據。
例如:Oracle、SQL Server、MySQL、Access。
二、數據庫應用系統在數據庫管理系統(DBMS)支持下建立的計算機應用系統,簡寫:DBAS。
例如:.net Java。
三、字符集從大到小排序:utf8--gbk--gb2312。
四、mysql的特點:
適用于中小型網站中,體積小、速度快、總體擁有成本低,尤其是有開放源碼這一特點。
五、目前Internet上滸的網站構架方式是LAMP(Linux+apache+mysql+php)即使用Linux作為操作系統,Apache作為Web服務器,MySQL作為數據庫,PHP作為服務器端腳本解釋器,由于4個軟件都是遵循GPL的開放源碼軟件,因此使用這種方式不用花一分錢就可以建立起一個穩定、免費的網站系統。
第二章
一、安裝過程中遇到的問題及解決方法:
安裝過程中沒有完成時計算機關機。(沒有刪除完文件)安裝完成時找不到所配置的路徑。(可以從配置文件中找到)
安裝完成后無法正常使用。(在計算機管理中重新啟動MySQL服務)安裝到一半時沒有出現下一步。(誤把配置文件刪除了)安裝到最后一步時start service錯誤。到控制面板里面先把mysql刪除.到c盤C:Program Files目錄下把mysql目錄刪除.如果在其他盤還有設置目錄也要刪除.空目錄也要刪除 到regedit把注冊表
HKEY_LOCAL_MACHINE/SYSTEM/ControlSet001/Services/Eventlog/Applications/MySQL HKEY_LOCAL_MACHINE/SYSTEM/ControlSet002/Services/Eventlog/Applications/MySQL HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/Eventlog/Applications/MySQL 有的話,全部刪除!(技巧:用F3循環查找“mysql”)如果任務管理器里有關mysql內容也刪除 把防火墻關了
重新裝mysql(這里我沒有重啟計算機)
重裝時候有必要的話,重啟計算機,停用IIS,和刪除temp里的臨時文件.實在不行的話,配置mysql時候,把mysql服務換個服務名.使用時輸入中文會出錯。(在配置時在“Character Set”選框中將latinl修改為gb2312;也可以在配置文件中修改)
二、啟動服務器的方法: ① 方法1:
在 “計算機管理”中的“服務”項目中啟動與停止。② 方法2: 使用命令(net start mysql和net stop mysql)
三、連接MySQL 格式: mysql-h主機地址-u用戶名 -p用戶密碼
①先在打開DOS窗口,然后進入目錄 mysqlbin(如果設置了環境變量,則直接輸入命令即可。)②鍵入命令mysql-uroot-proot ③接回車即可進入到MYSQL中了 MYSQL的提示符是:mysql> 注明:直接打開Mysql command line client
四、MySQL注釋符有三種: ①#...②“--...” ③
五、忘記密碼重新更改密碼
先停止mysql服務,修改D:MySQLMySQL Server 5.0 目錄下的my.ini文件,在[mysqld]下添加skip-grant-tables 啟動mysql服務后就可以以空密碼登錄,之后別忘記修改root密碼
use mysql update user set password=password('hanaixia')where user='root';(分號不能少)password('hanaixia')此處必須用函數設置。
修改密碼后需要重新啟動服務或者使用 flush privileges;語句,用于從mysql數據庫中的授權表重新載入權限。
把 skip-grant-tables 這一句刪掉再重啟mysql服務。