John Jiang

          a cup of Java, cheers!
          https://github.com/johnshajiang/blog

             :: 首頁(yè) ::  :: 聯(lián)系 :: 聚合  :: 管理 ::
            131 隨筆 :: 1 文章 :: 530 評(píng)論 :: 0 Trackbacks
          MySQL Weed
          使用MySQL的過(guò)程中,收集的一些小知識(shí)。(2007.09.04最后更新)

          簡(jiǎn)單SQL語(yǔ)句
          創(chuàng)建/刪除數(shù)據(jù)庫(kù)
          CREATE DATABASE mydb
          CREATE DATABASE mydb DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci

          DROP DATABASE mydb


          創(chuàng)建數(shù)據(jù)表
          CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tblname (
            colname1 coltype coloptions reference,
            colname2 coltype coloptions reference, ...
            [, index1, index2, ...])
          [ENGINE = MyISAM | InnoDB | HEAP]
          [DEFAULT CHARSET = csname [COLLATE = colname]]

          CREATE TABLE titles (
            titleID INT NOT NULL AUTO_INCREMENT,
            title VARCHAR(100) NOT NULL,
            subtitle VARCHAR(100),
            edition TINYINT,
            pubID INT,
            catID INT,
            langID INT,
            year INT,
            isbn VARCHAR(20),
            comment VARCHAR(255),
            ts TIMESTAMP,
            PRIMARY KEY (titleID),
            KEY pubIdIndex (pubID),
            KEY langID (langID),
            KEY catID (catID),
            KEY title (title),
            CONSTRAINT titles_ibfk_1 FOREIGN KEY (pubID)
              REFERENCES publishers (pubID),
            CONSTRAINT titles_ibfk_2 FOREIGN KEY (langID)
              REFERENCES publishers (langID),
            CONSTRAINT titles_ibfk_3 FOREIGN KEY (catID)
              REFERENCES categories (catID))
          ENGINE = InnoDB
          DEFAULT CHARSET = utf8 COLLATE = utf8_general_ci

          CREATE TABLE table2 SELECT * FROM table1 where id <= 10;

          DROP TABLE mytitle


          創(chuàng)建/刪除索引
          CREATE INDEX idxTitle ON titles (title)
          ALTER TABLE titles ADD INDEX idxTitle (title)
          SHOW INDEX FROM tablename -- 列出數(shù)據(jù)表tablename的索引

          DROP INDEX indexname ON tablename

          ALTER TABLE titles ADD INDEX idxTitle (title(16))


          變更表結(jié)構(gòu)
          ALTER TABLE tablename ADD newcolumn coltype coloptions [FIRST | AFTER]

          ALTER TABLE tablename CHANGE oldcolname newcolumn coltype coloptions

          ALTER TABLE tablename DROP colname

          ALTER TABLE tblname ADD PRIMARY KEY (indexcols ...)
          ALTER TABLE tblname ADD INDEX [indexname] (indexcols ...)
          ALTER TABLE tblname ADD UNIQUE [indexname] (indexcols ...)
          ALTER TABLE tblname ADD FULLTEXT [indexname] (indexcols ...)

          ALTER TABLE tblname ADD FOREIGN KEY [idxname]
            (column1) REFERENCES table2 (column2)

          ALTER TABLE tblname DROP PRIMARY KEY
          ALTER TABLE tblname DROP INDEX indexname
          ALTER TABLE tblname DROP FOREIGN KEY indexname

          ALTER NAME tablename ENGIEN typename


          MySQL伴隨Linux啟動(dòng)
          vi /etc/rc.d/rc.local
          加入語(yǔ)句:
          ./mysqld_safe --user=mysql &

          改變r(jià)oot用戶密碼
          mysql> update mysql.user set password=password('YourPwd') where user='root';
          mysql> flush privileges;

          增加新用戶
          [1]添加一用戶,使它擁有所有權(quán)限
          mysql> grant all on mydb.* to myuser@"myhost" Identified by "mypassword";

          [2]簡(jiǎn)單添加一用戶
          mysql>
          insert into mysql.user (host, user, password) values('%', 'NewUser', password('NewUserPwd'));
          mysql> flush privileges;
          注:最好使用grant命令。

          刪除用戶
          mysql> drop user userName;

          啟動(dòng)/關(guān)閉MySQL服務(wù)器
          啟動(dòng)(Linux下): mysqld_safe -u mysql &
          關(guān)閉: mysqladmin -uUser -pPassword -hHost shutdown


          導(dǎo)出/導(dǎo)入數(shù)據(jù)
          導(dǎo)出:
          mysqldump -uUser -pPasswd
          -hHost -B DB_NAME > SQL_FILE_PATH  -- 將數(shù)據(jù)庫(kù)DB_NAME全部導(dǎo)出到SQL_FILE_PATH文件中
          mysqldump -uUser -pPassword -hHost DATABASE_NAME --tables TABLE_NAME > SQL_FILE_PATH  -- 將數(shù)據(jù)庫(kù)DB_NAME中的表TABLE_NAME導(dǎo)出

          導(dǎo)入:
          mysql -uUser -pPassword -hHost < SQL_FILE_PATH  -- 將數(shù)據(jù)文件導(dǎo)入MySQL服務(wù)器中。注:該文件中必須有建數(shù)據(jù)庫(kù)的語(yǔ)句。

          mysqldump -uUser -pPassword -hHost -B DB_NAME < SQL_FILE_PATH  -- 將數(shù)據(jù)文件導(dǎo)入MySQL服務(wù)器的DB_NAME數(shù)據(jù)庫(kù)中。注:該文件中沒(méi)有建數(shù)據(jù)庫(kù)的語(yǔ)句。

          注意:在導(dǎo)入數(shù)據(jù)庫(kù)之前,需要在MySQL中新建一個(gè)名為DATABASE_NAME的空數(shù)據(jù)庫(kù)。

          啟動(dòng)日志
          修改mysql.ini/mysql.cnf文件,在[mysqld]后添加如下形式的語(yǔ)句。
          log="Absolte_Path_To_Log/sys.log"
          log-update="
          Absolte_Path_To_Log/ sys_update.log"

          使MySQL區(qū)分大小寫
          修改文件my.ini/my.cnf,在選項(xiàng)組[mysqld]之后添加
          lower_case_table_names=2

          修改某用戶的登錄密碼
          mysqladmin -uUser -pOldPasswd passwd NewPasswd
          mysql>update user set password=PASSWORD("NewPasswd") where user="myuser" and host="myhost";


          查看表結(jié)構(gòu)
          mysql> describe TableName

          修改表的字符集
          mysql> alter table tblName convert to character set charsetName

          修改表的表類型
          mysql> alter table tblName engine engineType

          SHOW
          show character set -- 查看字符集
          show collation
          show columns
          show create database
          show create procedure and show create function
          show create table
          show create view
          show databases
          show engine
          show engines
          show errors
          show grants
          show index
          show innodb status
          show logs
          show mutex status
          show open tables
          show privileges

          Java程序調(diào)用存儲(chǔ)過(guò)程,報(bào)權(quán)限不足

          前提:數(shù)據(jù)庫(kù)mydb中有存儲(chǔ)過(guò)程myproc;MySQL用戶myuser@localhost,擁有數(shù)據(jù)庫(kù)mydb的所有權(quán)限(grant all on mydb.* to myuser);使用MySQL官方JDBC驅(qū)動(dòng)(如mysql-connector-java-5.0.4.jar),在Java應(yīng)用程序中調(diào)用myproc。
              在執(zhí)行該Java應(yīng)用程序時(shí),可能出現(xiàn)如下問(wèn)題:
              test_proc executed failed because : Driver requires declaration of procedure to either contain a '\nbegin' or '\n' to follow argument declaration, or SELECT privilege on mysql.proc to parse column types.
          這表示用戶
          myuser@localhost 執(zhí)行該存儲(chǔ)過(guò)程的權(quán)限不足。但如果直接在MySQL客戶端中使用 myuser@localhost 用戶調(diào)用myproc,則沒(méi)有任何權(quán)限問(wèn)題。
              這其實(shí)是MySQL官方JDBC驅(qū)動(dòng)的問(wèn)題,因?yàn)镴DBC驅(qū)動(dòng)的代碼中除了調(diào)用 myproc外,還做了其它操作。這就可能出現(xiàn)權(quán)限問(wèn)題。可以有如下兩種解決方法:
              [1]修改myproc的definer。雖然myuser已經(jīng)擁有了mydb的所有權(quán)限,但由于JDBC驅(qū)動(dòng)的問(wèn)題,如果myproc的definer不是
          myuser@localhost,那么該用戶仍然無(wú)法執(zhí)行存儲(chǔ)過(guò)程。修改definer的值,使其為 myuser@localhost。
              [2]賦予
          myuser@localhost對(duì)表mysql.proc的查詢權(quán)限。在前面的錯(cuò)誤提示( SELECT privilege on mysql.proc to parse column types )中已經(jīng)表明了這一點(diǎn),可以執(zhí)行如下授權(quán)語(yǔ)句:grant select on mysql.proc to myuser@localhost。
              注:由于是MySQL JDBC驅(qū)動(dòng)的問(wèn)題,所以上述解決方法都不太好。所以在直接新建存儲(chǔ)過(guò)程,或?qū)隨QL文件(文件中包含創(chuàng)建存儲(chǔ)過(guò)程的語(yǔ)句)使用的MySQL用戶,最好與在Java應(yīng)用程序中使用的MySQL用戶保持一致。

          updating...
          posted on 2006-08-12 09:19 John Jiang 閱讀(902) 評(píng)論(0)  編輯  收藏 所屬分類: DatabaseMySQL
          主站蜘蛛池模板: 新郑市| 六盘水市| 宿迁市| 多伦县| 库伦旗| 金塔县| 辉县市| 华宁县| 东丽区| 包头市| 黑山县| 卓资县| 兴隆县| 海安县| 濉溪县| 瓦房店市| 淮南市| 伊金霍洛旗| 津市市| 赤水市| 钟祥市| 壶关县| 塘沽区| 梅州市| 建湖县| 绥江县| 霍山县| 扶绥县| 双城市| 衡山县| 乐东| 兴山县| 乃东县| 芜湖市| 西华县| 富源县| 南华县| 和政县| 靖远县| 永嘉县| 侯马市|