John Jiang

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

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

          簡單SQL語句
          創建/刪除數據庫
          CREATE DATABASE mydb
          CREATE DATABASE mydb DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci

          DROP DATABASE mydb


          創建數據表
          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


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

          DROP INDEX indexname ON tablename

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


          變更表結構
          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啟動
          vi /etc/rc.d/rc.local
          加入語句:
          ./mysqld_safe --user=mysql &

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

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

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

          刪除用戶
          mysql> drop user userName;

          啟動/關閉MySQL服務器
          啟動(Linux下): mysqld_safe -u mysql &
          關閉: mysqladmin -uUser -pPassword -hHost shutdown


          導出/導入數據
          導出:
          mysqldump -uUser -pPasswd
          -hHost -B DB_NAME > SQL_FILE_PATH  -- 將數據庫DB_NAME全部導出到SQL_FILE_PATH文件中
          mysqldump -uUser -pPassword -hHost DATABASE_NAME --tables TABLE_NAME > SQL_FILE_PATH  -- 將數據庫DB_NAME中的表TABLE_NAME導出

          導入:
          mysql -uUser -pPassword -hHost < SQL_FILE_PATH  -- 將數據文件導入MySQL服務器中。注:該文件中必須有建數據庫的語句。

          mysqldump -uUser -pPassword -hHost -B DB_NAME < SQL_FILE_PATH  -- 將數據文件導入MySQL服務器的DB_NAME數據庫中。注:該文件中沒有建數據庫的語句。

          注意:在導入數據庫之前,需要在MySQL中新建一個名為DATABASE_NAME的空數據庫。

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

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

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


          查看表結構
          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程序調用存儲過程,報權限不足

          前提:數據庫mydb中有存儲過程myproc;MySQL用戶myuser@localhost,擁有數據庫mydb的所有權限(grant all on mydb.* to myuser);使用MySQL官方JDBC驅動(如mysql-connector-java-5.0.4.jar),在Java應用程序中調用myproc。
              在執行該Java應用程序時,可能出現如下問題:
              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 執行該存儲過程的權限不足。但如果直接在MySQL客戶端中使用 myuser@localhost 用戶調用myproc,則沒有任何權限問題。
              這其實是MySQL官方JDBC驅動的問題,因為JDBC驅動的代碼中除了調用 myproc外,還做了其它操作。這就可能出現權限問題。可以有如下兩種解決方法:
              [1]修改myproc的definer。雖然myuser已經擁有了mydb的所有權限,但由于JDBC驅動的問題,如果myproc的definer不是
          myuser@localhost,那么該用戶仍然無法執行存儲過程。修改definer的值,使其為 myuser@localhost。
              [2]賦予
          myuser@localhost對表mysql.proc的查詢權限。在前面的錯誤提示( SELECT privilege on mysql.proc to parse column types )中已經表明了這一點,可以執行如下授權語句:grant select on mysql.proc to myuser@localhost。
              注:由于是MySQL JDBC驅動的問題,所以上述解決方法都不太好。所以在直接新建存儲過程,或導入SQL文件(文件中包含創建存儲過程的語句)使用的MySQL用戶,最好與在Java應用程序中使用的MySQL用戶保持一致。

          updating...
          posted on 2006-08-12 09:19 John Jiang 閱讀(907) 評論(0)  編輯  收藏 所屬分類: DatabaseMySQL
          主站蜘蛛池模板: 深水埗区| 青冈县| 乐山市| 富裕县| 怀远县| 环江| 商丘市| 瑞安市| 安乡县| 玛纳斯县| 常熟市| 通城县| 来凤县| 苗栗县| 托里县| 牡丹江市| 亳州市| 葫芦岛市| 刚察县| 永济市| 河池市| 电白县| 建宁县| 阿合奇县| 郸城县| 手机| 咸宁市| 呼图壁县| 金门县| 凤凰县| 宁国市| 安康市| 台安县| 谷城县| 洛扎县| 大关县| 长治县| 太仆寺旗| 龙泉市| 龙井市| 南汇区|