2017-08-31 19 views
-1

私はsqliteの中で、このいずれかを使用これら2つのSQLスクリプトの違いは何ですか?

CREATE TABLE IF NOT EXISTS developer(id INTEGER PRIMARY KEY AUTOINCREMENT,name TEXT,skill TEXT,yearsOfExperience INTEGER); 
INSERT INTO developer(name, skill, yearsOfExperience) VALUES ('Simon', 'Ionic', '4'); 
INSERT INTO developer(name, skill, yearsOfExperience) VALUES ('Jorge', 'Firebase', '2'); 
INSERT INTO developer(name, skill, yearsOfExperience) VALUES ('Max', 'Startup', '5'); 

これは、エクスポートされたMySQLのDBからですが

CREATE TABLE IF NOT EXISTS `user` (
    `user_id` int(11) NOT NULL, 
    `username` varchar(50) DEFAULT NULL, 
    `password` varchar(300) DEFAULT NULL, 
    `first_name` varchar(200) DEFAULT NULL, 
    `last_name` varchar(200) NOT NULL, 
    `email` varchar(300) DEFAULT NULL, 
    `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

彼らは、SQLけど、なぜ二つ目はsqliteのでは受け入れられないん両方ですそれをインポートするには? 違いが何であるか教えてくれる人がいるといいので、2番目のsqlのコピーをsqliteで読むことができます。

+1

正確なエラーメッセージを共有できますか?気にしないで、SQLiteには 'InnoDB'というエンジンはありません。これはMySQLの100%のものです.2番目の表にはMySQLの他の構文があります。 –

+0

@TimBiegeleisen私は同じ推測をしています。私はそれが何であるかを知ることができる人がいることを願っています.2番目のSQLのコピーをsqliteに読み込むことができます –

+0

今後の参考として、質問をより明確にしてみてください。このテーブルをMySQLからSQLiteにどのように移行すればよいか尋ねられたなら、あなたはダウン投票していないかもしれません。 –

答えて

0

あなたがこれに第二テーブルの現在のMySQL CREATE TABLE文をリファクタリングすることができます

CREATE TABLE IF NOT EXISTS user (
    user_id INTEGER NOT NULL, 
    username TEXT, 
    password BLOB, 
    first_name TEXT, 
    last_name TEXT, 
    email TEXT, 
    created INTEGER 
) 

のSQLiteの構文は特異をサポートしていません。エンジンを燃やす。 InnoDB)。また、varchar列タイプはありませんが、TEXTINTEGERがあります。列のデフォルト値はNULLです。したがって、NULLがデフォルト値の場合は、明示的に指定する必要はありません。 SQLiteはカラム名とテーブル名をエスケープするためのSQL標準に準拠しており、そのためにバッククォートではなく二重引用符を使用しています。そこで、すべての列名からバッククォートを削除しました。

最後に、createdのタイムスタンプをINTEGERに変更しました。エポックから秒を保存することができます。つまり、UNIXのタイムスタンプです。これに代わる方法は、タイムスタンプをTEXTとして保存することですが、これは予定通りに作業するのが難しいかもしれません。

+0

ああ、それは2だけを受け入れる? (TEXTとINTEGER)を使用しています。したがって、パスワードは暗号化/ハッシュできません。 –

+0

@JaneDoe SQLiteデータ型のリストについては、[here](https://sqlite.org/datatype3.html)を参照してください。ユーザーのプレーンテキストのパスワードを暗号化し、それを 'BLOB '型として格納することができます。 –

+0

よろしくお願いいたします。ご協力いただきありがとうございます。私は今日何か新しいことを学びました –

0

mysqlはsqlliteではありませんsqlliteで受け入れられるようにタイムスタンプがsqlliteに存在しないタイプ):

CREATE TABLE IF NOT EXISTS `user` (
`user_id` INTEGER PRIMARY KEY AUTOINCREMENT, 
`username` varchar(50), 
`password` varchar(300) , 
`first_name` varchar(200), 
`last_name` varchar(200) NOT NULL, 
`email` varchar(300), 
`created` TEXT NOT NULL 
); 
+0

これは有効なSQLite構文ではありません。 –

+0

@abderrahimeあなたはそれについてもっと教えてもらえますか?タイムスタンプとして使用できるものはありますか? –

+0

TIMESTAMPはintger(1970年以降の秒数)と似ていますので、テキストで置き換えるかNUMBERをタイプすることができますが、TIMESTAMPを使用することもできます:try this:ユーザが存在しない場合には( user_id INTEGER PRIMARY KEY AUTOINCREMENT、 ユーザ名TEXT、 パスワードTEXT、 FIRST_NAMEのTEXT、 LAST_NAME TEXT NOT NULLと、 電子メールTEXT、 作成TIMESTAMP NOT NULLを )。 –

関連する問題